我需要修改Web API抛出404错误时出现的消息:
现在,如果不存在任何api,请关注访问https://mywebsite/api/foo/?%22%26gt;%26lt;script%26gt;_q_q=)(%26lt;/script%26gt;
我收到以下回复:
{“Message”:“找不到与请求URI匹配的HTTP资源 'https://mywebsite/api/foo/ \?“><脚本> _q_q =)(小于/脚本>'。”, “MessageDetail”:“在控制器'MyController'上找不到任何动作 匹配请求。“}
我想修改此消息。
为了做到这一点,我尝试了这个..
我在控制器上添加了一个自定义属性:
[NoActionFoundFilterAttribute]
public class MyController
过滤器的代码是:
public class NoActionFoundFilterAttribute: ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
// My code
}
}
在Web API Config中,我已经添加了过滤器:
config.Filters.Add(new NoActionFoundFilterAttribute());
即使在完成上述所有步骤之后,也会出现OnException 调用无效操作时,未触发“NoActionFoundFilterAttribute”文件。
您是否可以分享我所缺少的内容以修改自定义404错误消息
答案 0 :(得分:4)
我能够找到解决方案。
这是我做的:
我添加了以下行来挂钩Web API响应管道,以获取Web API返回的消息:
config.MessageHandlers.Add(new WebApiCustomMessageHandler());
然后我像这样实现了WebApiCustomMessageHandler:
public class WebApiCustomMessageHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
if (response.StatusCode == HttpStatusCode.NotFound)
{
request.Properties.Remove(HttpPropertyKeys.NoRouteMatched);
var errorResponse = request.CreateResponse(response.StatusCode, "Content not found.");
return errorResponse;
}
return response;
}
}
在实现上述解决方案后,我能够从WebAPI修改ContentNotFound响应。答案终于如此:
“未找到内容。”