Asp.net web api 每个路由和全局的ASP.NET Web API自定义消息处理程序
我有3个ASP.NET Web API消息处理程序:Asp.net web api 每个路由和全局的ASP.NET Web API自定义消息处理程序,asp.net-web-api,asp.net-web-api2,asp.net-web-api-routing,asp.net-routing,Asp.net Web Api,Asp.net Web Api2,Asp.net Web Api Routing,Asp.net Routing,我有3个ASP.NET Web API消息处理程序: Handler1 Handler2 授权处理人 Handler1和Handler2是全局的(适用于所有路由),一个处理程序(AuthorizeHandler)适用于一个路由 但是,我在实施过程中遇到了一些问题: public static void Register(HttpConfiguration config) { config.MessageHandlers.Add(new Ha
- Handler1
- Handler2
- 授权处理人
public static void Register(HttpConfiguration config)
{
config.MessageHandlers.Add(new Handler1()); //this will apply to all routes
config.MessageHandlers.Add(new Handler2()); //this will apply to all routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "FreeAPI",
routeTemplate: "api/free/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "SecretAPI",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: null,
handler: new AuthorizeHandler() // this will apply just to this route
{
InnerHandler = new HttpControllerDispatcher(config)
}
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
基本上,我试图做的是创建一个匿名路由,任何人都可以在没有身份验证的情况下呼叫,并且创建一个需要身份验证才能访问它的路由
然而,我所做的这个实现不起作用
例如,我希望将此端点:api/free/someanonymouscontroller/someanonymousaction/someanonymousid
设置为匿名,并将此端点api/somesecurecontroller/somesecureaction/somesecureid
设置为需要身份验证的安全端点
如果我使用fiddler来测试它,在这个端点上:api/somesecurecontroller/somesecureaction/somesecureid
如果我使用这个ednpoint:api/free/somesecurecontroller/somesecureaction/somesecureid
(注意自由路径)我可以访问安全端点,而无需处理程序触发…Hmm
为了工作,我做了以下修改。我从模板{controller}中删除并添加到defaults controller=“free”。现在所有的请求都将被发送到正确的位置
这是正确的方法吗
config.Routes.MapHttpRoute(
name: "FreeAPI",
routeTemplate: "api/free/{action}/{id}",
defaults: new { controller="free", id = RouteParameter.Optional }
);