从请求过滤器返回特定的操作结果
我在我的MVC应用程序中全局注册了一个Filter Attribute,它根据url检查特定的配置。 我计划在IIS中使用一个catchall,因此对于不匹配的域,我想先显示一个404页面而不重定向。
到目前为止我有:
public class GetWebsiteConfiguration : FilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
string siteNoteFoundName = "SiteNotFound";
string controllerName = "Error";
if (filterContext.ActionDescriptor.ActionName != siteNoteFoundName && filterContext.ActionDescriptor.ControllerDescriptor.ControllerName != controllerName)
{
//Code removed for brevity
IWebsiteService websiteSvc = new WebsiteService();
Website website = websiteSvc.GetByDomain(HttpContext.Current.Request.Url.Host);
if (website != null)
{
//load up the website's config - e.g. asset code etc.
}
else
{
//this is where I'm stuck - I want to return my action result SiteNotFound in my
//controller Error as the filterContext.Result.
//filterContext.Result = ??
}
}
}
}
但是,我无法弄清楚要设置filterContext.Result。 我尝试了controller.Execute(),但是它提供了请求的原始页面以及未找到的页面。 我知道我可以做一个redirectResult,但我宁愿不......
提前致谢。
一种方法是创建一个基本控制器并在那里移动SiteNotFound动作。
public class BaseController : Controller {
protected HttpNotFoundResult SiteNotFound(string statusDescription = null)
{
return new HttpNotFoundResult(statusDescription);
}
}
然后,您可以简单地将结果分配为:
filterContext.Result = filterContext.Controller.SiteNotFound(<description>);
您也可能想要设置此项(以避免IIS捕获这些错误)
controllerContext.HttpContext.Response.TrySkipIisCustomErrors = true;
链接地址: http://www.djcxy.com/p/74437.html
上一篇: Returning a specific action result from a request filter