在Web API中捕获错误并将其分配给模型值通常涉及异常处理机制。以下是一个基本的示例,展示了如何在ASP.NET Core Web API中实现这一功能。
以下是一个简单的示例,展示了如何在ASP.NET Core Web API中捕获错误并将其分配给模型值。
public class ApiError
{
public int StatusCode { get; set; }
public string Message { get; set; }
}
在 Startup.cs
中配置全局异常处理中间件:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
// 全局异常处理中间件
app.Use(async (context, next) =>
{
try
{
await next();
}
catch (Exception ex)
{
context.Response.ContentType = "application/json";
context.Response.StatusCode = StatusCodes.Status500InternalServerError;
var error = new ApiError
{
StatusCode = context.Response.StatusCode,
Message = "Internal Server Error"
};
await context.Response.WriteAsync(JsonSerializer.Serialize(error));
}
});
}
[ApiController]
[Route("api/[controller]")]
public class SampleController : ControllerBase
{
[HttpPost]
public IActionResult Create([FromBody] SampleModel model)
{
try
{
// 业务逻辑
if (model == null)
{
throw new ArgumentException("Model is null");
}
// 处理成功
return Ok(new { message = "Success" });
}
catch (Exception ex)
{
var error = new ApiError
{
StatusCode = StatusCodes.Status400BadRequest,
Message = ex.Message
};
return BadRequest(error);
}
}
}
try-catch
块捕获特定异常,并返回相应的错误信息。通过在Web API中实现全局和局部异常处理机制,可以有效地捕获和处理错误,并将错误信息分配给模型值,从而提高系统的稳定性和用户体验。
没有搜到相关的文章