我有3個的ASP.NET Web API的消息處理程序:的ASP.NET Web API的定製消息處理程序和全球
- Handler1
- Handler2
- AuthorizeHandler
Handler1和Handler2是全局的(適用於所有路由),一個單獨的處理程序(AuthorizeHandler)適用於單一路由。
但是我在落實一些這方面的問題:
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
(注意自由路徑)我可以訪問沒有處理程序觸發的安全端點..