gpt4 book ai didi

c# mvc - 如何从通用方法返回特定 View

转载 作者:行者123 更新时间:2023-11-30 22:52:49 26 4
gpt4 key购买 nike

我的服务层返回错误代码,我必须返回相应的 View 。但是由于有许多可能的错误代码,我的 Controller 方法会有很大的切换情况。所以我决定从一些具有此方法的基本 Controller 继承所有 Controller :

 public IActionResult GetResponse<T>(ServiceResponse<T> serviceResponse)
{
switch (serviceResponse.Result)
{
case ServiceResult.Ok: return Ok(serviceResponse.ResponseObject);
case ServiceResult.ValidationError: return BadRequest(serviceResponse.Messages);
case ServiceResult.NoPermission: return Unauthorized(serviceResponse.Messages);
case ServiceResult.NotFound: return BadRequest(serviceResponse.Messages);
default: return BadRequest();
}
}

现在,问题是,此方法的输入参数来自服务层。服务层返回实体对象。我需要以某种方式从此实体对象创建 ViewModel。我可以传递一个指示所需 ViewModel 类型的参数并制作另一个开关 block ,但我认为这不是最佳选择。在我的案例中,有什么方法可以将实体映射到 View 模型对象吗?

最佳答案

您可以添加如下所示的错误处理中间件并将其挂接到管道中。当然,您需要根据自己的故事修改它。

public class ErrorHandlingMiddleware
{
private readonly RequestDelegate _next;
public ErrorHandlingMiddleware(RequestDelegate next)
{
_next = next;
}

public async Task Invoke(HttpContext context /* other dependencies */)
{
try
{
await _next(context);
}
catch (Exception ex)
{
await HandleExceptionAsync(context, ex);
}
}

private static Task HandleExceptionAsync(HttpContext context, Exception ex)
{
var code = HttpStatusCode.InternalServerError; // 500 if unexpected
if (ex is CustomExceptionOne) code = HttpStatusCode.BadRequest;
if (ex is CustomExceptionTwo) code = HttpStatusCode.Unauthorized;

var result = JsonConvert.SerializeObject(new { error = ex.Message });
context.Response.ContentType = "application/json";
context.Response.StatusCode = (int)code;
return context.Response.WriteAsync(result);
}
}

并在启动配置方法中:

app.UseMiddleware(typeof(ErrorHandlingMiddleware));

关于c# mvc - 如何从通用方法返回特定 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57786094/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com