2014-09-12 98 views
1

未經授權的請求我註冊了MessageHandler(與config.MessageHandlers.Add(新ValidationHandler())從DelegatingHandler繼承。它檢查每個請求的安全令牌並檢查它是否是有效的。允許特定actionmethods

我在我的控制器2個或3 actionmethods這應該是accessabel沒有任何授權

我的問題:。 MessageHandler的第一次調用,所以這應該是accessabel來自世界各地的actionmethod將作爲未經授權的請求來處理 我我不會改變MessageHandler的代碼。 我試過添加allowanonymous屬性,但我仍然收到未經授權的響應。我發現這個職位Redirecting unauthorized controller in ASP.NET MVC。所以我現在的想法是將HandleUnauthorizedRequest上的用戶轉發到適當的操作方法。但我認爲這不是最好的方法。

有沒有更好的方法呢?有沒有辦法告訴web.config actionmethod1和actionmethod2被允許作爲Unauthorizedded用戶被訪問?

[編輯] 使用AuthorizeAttribute創建一個UnAuthorizeAttribute,將用戶仍然轉到操作方法不起作用。消息處理程序「殺死」請求

  statusCode = HttpStatusCode.Unauthorized; 
      return Task<HttpResponseMessage>.Factory.StartNew(() => new HttpResponseMessage(statusCode)); 

因此UnAuthorizeAttribute不會被調用。我正在使用asp.net mvc webapi

+0

[AllowAnonymous]屬性不適合? – aleha 2014-09-12 21:03:20

+0

AllowAnonymous將不起作用,因爲當Task .Factory.StartNew(()=> new HttpResponseMessage(HttpStatusCode.Unauthorized))時,不會調用具有AllowAnonymous屬性的actionmethod;設置爲 – Briefkasten 2014-09-15 10:47:42

回答

0

您可以嘗試創建actionfilter來處理此問題,因爲您知道要進入控制器/操作的請求。這是公正的想法。

http://www.codeproject.com/Articles/650240/A-Simple-Action-Filter-Overview

希望這有助於。

+0

我正在使用BaseController(WebAPI)並重寫ExecuteAsync方法(System.Web.Http.Controllers.HttpControllerContext controllerContext,CancellationToken cancellationToken)並添加了一個斷點。但是如果發出未經授權的請求,它不會受到影響。 – Briefkasten 2014-09-12 14:25:03