asp.net-web-api 相关问题

ASP.NET Web API是一个用于为浏览器和移动设备等客户端构建HTTP服务的框架。它基于Microsoft .NET Framework,是构建RESTful服务的理想选择。

Asp.net Web API MVC 无法加载包

当我在 Visual Studio 2017 中创建新的 Web API 应用程序时,我遇到以下错误消息: 谁能告诉我如何解决这个问题吗?

回答 1 投票 0

我应该将电子邮件通知放在哪里 - 基础设施层还是应用程序层?

我正在学习洋葱架构,目前正在开发遵循此架构的后端服务。我想在我的应用程序中包含的功能之一是发送

回答 1 投票 0

Web Api 参数绑定:snake_case 到camelCase

我正在一个新的Web api项目上做一些工作,我的方法/参数遵循标准的c#命名格式;方法名是PascalCase,参数是camelCase。 不幸的是我只是

回答 4 投票 0

将数据表合并为具有条件 asp.net Web API 的 JSON 数组

我有两个数据表 数据表 dt1 和 数据表 dt2. dt1 充满产品,dt2 充满产品口味。 两个表都有一个共同的 ID,即产品代码。 使用 newtonsoft JSON

回答 1 投票 0

Asp Net Core:HttpClient post请求出现问题:方法名称而不是参数

很高兴知道:这是一个有点奇怪的解决方案,但作为我在 OpenClassrooms 学习的一部分,这是我必须做的练习。 在 Asp Net Core 解决方案中,我有 4 个项目: HspFrontEnd 是一个...

回答 1 投票 0

MediatR:全局异常处理程序正在执行多次

我正在使用 MediatR 在 ASP.NET Web API 中实现 CQRS。为了捕获异常并将其记录到数据库中,我想使用全局异常处理程序: 公共类 GlobalRequestExceptionHandler 我正在使用 MediatR 在 ASP.NET Web API 中实现 CQRS。为了捕获异常并将其记录到数据库中,我想使用全局异常处理程序: public class GlobalRequestExceptionHandler<TRequest, TResponse, TException>(IMediator mediator, ILoggerService loggerService) : IRequestExceptionHandler<TRequest, TResponse, TException> where TRequest : notnull where TException : Exception { private readonly IMediator _mediator = mediator; private readonly ILoggerService _loggerService = loggerService; public async Task Handle(TRequest request, TException exception, RequestExceptionHandlerState<TResponse> state, CancellationToken cancellationToken) { try { if (IsLogSystemErrorCommandException(request)) return; var systemError = SystemError.Create(request.GetType().Name, exception.GetType().Name, exception.Message, exception.StackTrace, VentureDomain.Common, VentureModule.Common); var command = new LogSystemErrorCommand(systemError); var result = await _mediator.Send(command, cancellationToken); } catch (Exception ex) { _loggerService.Log(ex.Message, LogLevel.Error); } } private bool IsLogSystemErrorCommandException(object? errorObject) { return errorObject?.GetType() == typeof(LogSystemErrorCommand); } } 错误记录命令供参考: public class LogSystemErrorCommandHandler(DbContext context, IResultService resultService) : IRequestHandler<LogSystemErrorCommand, Result> { private readonly DbContext _context = context; private readonly IResultService _resultService = resultService; public async Task<Result> Handle(LogSystemErrorCommand request, CancellationToken cancellationToken) { _context.Add(request.SystemError); await _context.SaveChangesAsync(cancellationToken); return _resultService.CreateSuccess(); } } 但是,每当命令或查询的原始请求处理程序中抛出异常时,该处理程序就会执行 3/4 次,这意味着我将 3/4 的系统错误日志记录到数据库中。 我已经阅读过有关多次执行其他处理程序的信息,但我在服务注册中没有看到错误,就像某些帖子可能暗示的那样。 我为此使用了一个简单的扩展方法: public static class RequestRegistration { public static void AddSystemSurveillanceRequestHandlers(this MediatRServiceConfiguration configuration) { configuration.RegisterServicesFromAssembly(typeof(RequestRegistration).Assembly); } } 编辑: 我应该补充一点,每次调用异常处理程序时,调用堆栈都是相同的。原始请求处理程序仅运行一次。不将错误日志存储到数据库也不会阻止异常处理程序被多次调用。 原来我错过了一些重要的事情 使用 IRequestExceptionHandler 处理异常时,您需要使用 RequestExceptionHandlerState<TResponse> 将 SetHandled(TResponse) 设置为 handled。 您可以像这样调整上面的实现: public async Task Handle(TRequest request, TException exception, RequestExceptionHandlerState<TResponse> state, CancellationToken cancellationToken) { try { if (IsLogSystemErrorCommandException(request)) return; var systemError = SystemError.Create(request.GetType().Name, exception.GetType().Name, exception.Message, exception.StackTrace, VentureDomain.Common, VentureModule.Common); var logSystemErrorCommand = new LogSystemErrorCommand(systemError); var logSystemErrorResult = await _mediator.Send(command, cancellationToken); state.SetHandled(null!); } catch (Exception ex) { _loggerService.Log(ex.Message, LogLevel.Error); } } 请注意,使用添加的 null! 作为参数,而该方法实际上需要一个非空值,但是如果您进入源代码,您可以看到 TResponse? 中的 state 属性本身可为空,并且.SetState()方法实际上只是传递你的价值。它不是最好的解决方案,但如果没有任何其他解决方案来实际使用正确的值,应该没问题。 使用类似结果模式的方法 我将返回的数据包装在结果记录中,如下所示: public record Result(ResultCode Code, object? Message); public record Result<TData>(ResultCode Code, object? Message, TData? Data) : Result(Code, Message); 这就是为什么我选择尝试实例化一个正确的结果来表示请求期间发生了异常: public class GlobalRequestExceptionHandler<TRequest, TResponse, TException>(IMediator mediator, ILoggerService loggerService) : IRequestExceptionHandler<TRequest, TResponse, TException> where TRequest : notnull where TException : Exception { private readonly IMediator _mediator = mediator; private readonly ILoggerService _loggerService = loggerService; public async Task Handle(TRequest request, TException exception, RequestExceptionHandlerState<TResponse> state, CancellationToken cancellationToken) { try { if (IsLogSystemErrorCommandException(request)) return; var requestName = request.GetType().Name; var systemError = SystemError.Create(requestName, exception.GetType().Name, exception.Message, exception.StackTrace, VentureDomain.Common, VentureModule.Common); var logSystemErrorCommand = new LogSystemErrorCommand(systemError); var logSystemErrorResult = await _mediator.Send(logSystemErrorCommand, cancellationToken); var exceptionResult = GetExceptionResult(requestName); state.SetHandled(exceptionResult!); } catch (Exception ex) { _loggerService.Log(ex.Message, LogLevel.Error); } } private bool IsLogSystemErrorCommandException(object? errorObject) { return errorObject?.GetType() == typeof(LogSystemErrorCommand); } private TResponse? GetExceptionResult(string requestName) { var resultType = typeof(TResponse); if (resultType == typeof(Result)) return (TResponse?)Activator.CreateInstance(typeof(TResponse), ResultCode.Exception, requestName); else if (IsResultWithGenericData(resultType)) return (TResponse?)Activator.CreateInstance(typeof(TResponse), ResultCode.Exception, requestName, null); return default; } private bool IsResultWithGenericData(Type resultType) { var genericDataResultType = typeof(Result<>); var typeArguments = resultType.GetGenericArguments(); if (typeArguments.Length == 1) { var genericTypeDefinition = resultType.GetGenericTypeDefinition(); return genericTypeDefinition == genericDataResultType; } return false; } }

回答 1 投票 0

jwt Web 令牌应该加密吗?

我正在阅读有关 JWT Web 令牌作为发送给用户的访问令牌的文章。其中一些提到网络令牌应该能够被用户解码。 这是否意味着它很糟糕

回答 5 投票 0

如何在JS中构造一个与C#中的对象相对应的对象[已关闭]

我使用.Net Web API,我想获取C#中对象的结构并将其发送到前面,以便它可以像后面一样构造对象。 我不知道如何获得我的o的确切结构...

回答 2 投票 0

Aspnetcore.Identity.EntityFramework 6.0.9,SignInManager 不起作用

我正在使用 Microsoft.AspNetCore.Identity.EntityFrameworkCore 6.0.9 Nuget 包,我无法使用 SignInManager 方法。 这个方法是否已被其他方法取代,或者我在某些地方犯了错误

回答 1 投票 0

在 swagger 中启用身份验证

我创建了一个在.net6上运行的asp.net core空项目。当我尝试在 swagger 中启用身份验证时遇到一个问题。 Swagger UI 按预期运行,唯一的问题是每当我...

回答 3 投票 0

错误 401 未经授权。 ASP.NET 核心。使用 JWT 创建身份验证/授权

我正在使用 JWT 创建身份验证/授权。我得到了令牌: 创建令牌,但将其粘贴到 swagger 后仍然出现错误 401 来自服务器的无效令牌响应 这是 jwt 解码...

回答 1 投票 0

如何将Serilog日志文件分割成多个文件?

我正在尝试按 SourceContext 拆分日志。 花了几天时间阅读文档和很多很多帖子后,我有了这个配置,但没有解决方案: “串行日志”:{ “你……

回答 1 投票 0

ASP.NET Core Results.File 与 Results.Stream

我使用以下代码从 ASP.NET Core API 返回一个文件: app.MapGroup("文件").MapGet("/export", async () => { var fileStream = someCode1(); var fileType= 一些...

回答 1 投票 0

调试时事件处理程序中的参数未命中

我有一个事件处理程序,如下代码所示: viewer.LocalReport.SubreportProcessing += new Microsoft.Reporting.WebForms.SubreportProcessingEventHandler(LocalReport_SubreportProcessing); 还有这个...

回答 1 投票 0

Web API - Web URL 的默认路由

我设置了一个网络 API。我想要路由到的 URL 是 https://localhost:44378,但 Web API 强制我使用 https://localhost:44378/api/status。 我如何设置默认值,以便在出现任何流量时...

回答 1 投票 0

在 Web API 中传递对象列表以获取方法

如何将对象列表传递给 Web API get 方法? 我不想发布此列表,只想对此数据执行一些函数并返回一个值。 我尝试了以下代码: [路线...

回答 1 投票 0

Web API POST 请求添加新记录,但所有属性都设置为 NULL?

我有一个 Web API POST 请求,该请求应该使用在正文中找到的属性作为 JSON 将新记录添加到特定表中。但是,当输入所有属性时(我认为它们是共同的...

回答 1 投票 0

Asp.net(或任何其他)Web API 服务器是如何构建的?

我想知道是否有任何方案、图表或书籍可以解释如何构建 Web API 服务器。我说的是更深层次的东西,例如线程池是如何构建的,路由表和其他......

回答 1 投票 0

ASP.NET Core Web API - FluentValidationMvcExtensions.AddFluentValidation(IMvcBuilder, Action<FluentValidationMvcConfiguration>)'已过时

在 ASP.NET Core-6 Web API 中,我使用 FluentValidation.AspNetCore(11.2.1)。 我在 Program.cs 中有这段代码: builder.Services.AddMvc().AddFluentValidation(fv => { fv.

回答 5 投票 0

我无法使用本地存储中的令牌进行授权。对 API 的请求返回 200,但导航到 [Authorize] 页面会产生 302

Web API 入口 [HttpPost("登录")] 公共异步任务登录([FromBody] LoginRequestDto loginRequest) { var token =等待_authService.Logi...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.