[英]c# mvc - how to return specific view from generic method
我的服務層返回錯誤代碼,我必須返回相應的視圖。 但是有許多可能的錯誤代碼,我的控制器方法會有很大的開關案例。 所以我決定從一些具有這種方法的基本控制器繼承所有控制器:
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 類型的參數並制作另一個開關塊,但我認為這不是最佳選擇。 在我的情況下,有沒有辦法將實體映射到查看模型對象?
您可以添加如下所示的錯誤處理中間件並將其掛接到管道中。 當然,你需要為你自己的故事修改這個。
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));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.