我有一个应用程序将充当可能来自各种目标的请求的“包罗万象”。我希望能够根据“接受”标头的值重定向到我的应用程序中的不同控制器/操作。
澄清:如果可能的话,我想在没有 HTTP 处理程序的情况下执行此操作。
我有一个应用程序将充当可能来自各种目标的请求的“包罗万象”。我希望能够根据“接受”标头的值重定向到我的应用程序中的不同控制器/操作。
澄清:如果可能的话,我想在没有 HTTP 处理程序的情况下执行此操作。
您可以编写自定义路线:
public class MyRoute : Route
{
public MyRoute(string url, object defaults)
: base(url, new RouteValueDictionary(defaults), new MvcRouteHandler())
{
}
public override RouteData GetRouteData(HttpContextBase httpContext)
{
var rd = base.GetRouteData(httpContext);
if (rd == null)
{
return null;
}
var accept = httpContext.Request.Headers["Accept"];
if (string.Equals("xml", accept, StringComparison.OrdinalIgnoreCase))
{
rd.Values["action"] = "xml";
}
else if (string.Equals("json", accept, StringComparison.OrdinalIgnoreCase))
{
rd.Values["action"] = "json";
}
return rd;
}
}
然后注册这条路线:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(
"Default",
new MyRoute(
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
)
);
}
现在,当您 POST/home
并将Accept
请求标头设置为控制器xml
的Xml
操作时,Home
将被命中。
制作一个路由..只是一个简单的类并从RouteBase
这里派生它,您会发现GetRouteData(System.Web.HttpContextBase httpContext)
返回类型为RouteData
u 的方法可以从中挑选出您选择的标头,并将您httpcontext
的路由的值添加到函数的返回值中..
你可以使用 Phil haack Route Magic插件,它有HttpHandler Routing但它使用 HttpHandler 你可以看看,看看你是否喜欢