gpt4 book ai didi

c# - ASP.NET Odata Web API 的错误处理

转载 作者:可可西里 更新时间:2023-11-01 08:19:40 27 4
gpt4 key购买 nike

我很想知道在 ODataController 中引发异常所遵循的最佳实践是什么。

如果您在方法中引发异常,默认情况下它会转换为响应代码 500,并且内容包含有关错误的详细信息。我想明确响应代码,并在 key 无效的情况下发送 400。

例如:如果输入请求有一个无效的键想返回 400 的 HttpResponseCode 并且内容应该有类似于引发异常的错误详细信息。

非常感谢您的意见

最佳答案

OData(至少从 v3 开始)使用 specific json表示错误:

{
"error": {
"code": "A custom error code",
"message": {
"lang": "en-us",
"value": "A custom long message for the user."
},
"innererror": {
"trace": [...],
"context": {...}
}
}
}

Microsoft .Net 包含 Microsoft.Data.OData.ODataErrorMicrosoft.Data.OData.ODataInnerError在服务器端形成 OData 错误的类。

要形成包含错误详细信息的正确 OData 错误响应 ( HttpResponseMessage),您可以:

1) 使用 System.Web.OData.Extensions.HttpRequestMessageExtensions.CreateErrorResponse 在 Controller 的操作中形成并返回 HttpResponseMessage方法

return Request.CreateErrorResponse(HttpStatusCode.Conflict, new ODataError { ErrorCode="...", Message="...", MessageLanguage="..." }));

2) 使用与创建 HttpResponseMessage 相同的方法抛出 HttpResponseException

throw new HttpResponseException(
Request.CreateErrorResponse(HttpStatusCode.NotFound, new ODataError { ErrorCode="...", Message="...", MessageLanguage="..." }));

3) 抛出自定义类型异常并使用 Web Api 操作过滤器转换它

public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
if (context.Exception is CustomException)
{
var e = (CustomException)context.Exception;

var response = context.Request.CreateErrorResponse(e.StatusCode, new ODataError
{
ErrorCode = e.StatusCodeString,
Message = e.Message,
MessageLanguage = e.MessageLanguage
});
context.Response = response;
}
else
base.OnException(context);
}
}

关于c# - ASP.NET Odata Web API 的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19389070/

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