在Web API项目中实现CustomErrors

时间:2015-08-05 17:59:46

标签: asp.net-web-api attributes

我正在尝试使用我的web.config文件在Web API项目中实现自定义错误处理。我的问题是重定向没有发生。我在我的网络配置中设置了以下内容:



<customErrors mode="On" defaultRedirect="~/Page/Error?errorId=59">
      <error statusCode="403" redirect="~/Page/Error?errorId=59"/>
</customErrors>
&#13;
&#13;
&#13;

这可能是棘手的: 我使用的是我放置在控制器中的自定义属性,如果请求不是来自列出的引荐来源,则该属性会返回403状态代码。

这里是属性代码:

public class Action1DebugActionWebApiFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        // pre-processing
        HttpRequestMessage request = actionContext.Request;
       string ipAddress = ((HttpContextWrapper)request.Properties["MS_HttpContext"]).Request.UserHostAddress;

        if (!IsIpAddressAllowed(ipAddress.Trim()))
        {
           actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Forbidden);
        }
    }

然后我将属性添加到我的控制器中,如下所示:

[Action1DebugActionWebApiFilter]
[HttpGet]
[Route("MyRedirect")]
public IHttpActionResult MyRedirect([FromUri]UserModel myUser)

我知道403正在制作,因为我可以在我的Firefox网络标签中看到它。但重定向并未发生(在Fiddler中验证)。我只是在控制器重定向上得到一个空白屏幕,所有Get参数就在那里。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这是因为<customErrors>部分不适用于asp web api。