ASP.NET AuthorizeFilter发送到404

时间:2015-07-06 21:04:32

标签: c# asp.net asp.net-mvc

我正在使用ASP.NET 5.我正在创建一个从AuthorizeFilter继承的新过滤器。

我正在压倒" OnAuthorizationAsync()"代码如下所示:

public override Task OnAuthorizationAsync(Microsoft.AspNet.Mvc.AuthorizationContext context)
{
   var isSpecialCase = true;
   if (isSpecialCase)
   {
      context.Result = new HttpNotFoundResult();
      context.HttpContext.Response.StatusCode = 404;
      return Task.FromResult(0);
   }
   //If not special case, lets the base handler do its work
   else
   {
      return base.OnAuthorizationAsync(context);
   }
}

除了一个问题外,这正是我想要的。这不会返回我在导航到真正不存在的页面时发现的典型404错误,而只是返回一个空白页面。

我认为主要问题是返回" HttpNotFoundResult"返回一个ActionResult(),而不是一个ViewResult()。但是,我希望该动作可以转换为所需的视图。

为什么它会返回一个空白页面,我怎样才能让它返回正确的404错误页面?

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

这样做:

throw new HttpException(404, "File Not Found");

或试试这个(mvc 6)

不要返回任务(删除return)只需将响应状态代码设置为404:

  context.HttpContext.Response.StatusCode = 404;

根据您的托管情况,发回的上下文将有所不同。即在iis中为404设置自定义错误页面

同时检查您是否确实收到了404检查fiddler或浏览器开发工具中的响应。