2013-01-18 47 views
4

我保護的WebAPI使用窗體身份驗證,當我打電話的WebAPI方法,我又回到了下面的錯誤正在使用Breezecontroller 。FormAuthentication用的WebAPI用微風

狀態:404 狀態文本:「未找到」 消息:「元數據查詢失敗:‘’;,沒有HTTP資源被發現塔匹配...

我的問題是,爲什麼我不能找回「未經授權的錯誤(401)」? 元裝飾有[授權]爲好。

好像FormsAuthentication的重定向是給問題。 它被重定向到登錄(有使用AllowAnonymous)的WebAPI方法和報告它不能找到沉綿我有。我也應用Authrozie而不是控制器的方法,確切的錯誤是

{"$id":"1","$type":"System.Web.Http.HttpError,System.Web.Http","Message":"NoHTTPresourcewasfoundthatmatchestherequestURI'http://localhost:40678/api/Country/Login?ReturnUrl=/api/Country/Metadata'.","MessageDetail":"Noactionwasfoundonthecontroller'Country'thatmatchestherequest."} 

回答

3

只是嘗試和工作的罰款。我打賭你的網址有誤。

這裏是初試到我的控制器:

 
[Authorize] 
[BreezeController] 
public class BreezeTodoController : ApiController 
{ 
    private readonly BreezeTodoContext _context; 

    public BreezeTodoController() { 
     _context = new BreezeTodoContext(User); 
    } 

    [HttpGet] 
    public string Metadata() { 
     return _context.Metadata(); 
    } 
    // ... more 

我這個URL

 
http://localhost:32377/api/breezetodox/metadata 

打它,我找回了401

 
Request URL:http://localhost:32377/api/breezetodo/metadata 
Request Method:GET 
Status Code:401 Unauthorized 

但是,如果我做一個錯誤的URL(見breezetodo後的 'X')

 
Request URL:http://localhost:32377/api/breezetodox/metadata 
Request Method:GET 
Status Code:404 Not Found 

如果我的動作名稱不符(見「X」後的元數據),同樣的事情:

 
Request URL:http://localhost:32377/api/breezetodo/metadatax 
Request Method:GET 
Status Code:404 Not Found 

換句話說,HTTP不能報告說,資源是未經授權的,如果它能夠」首先找到該資源。

+0

好像FormsAuthentication的重定向是給問題。 –

+0

病房裏,我仍然得到404,並作爲FormsAuthentication的原因重定向到登錄網址,發現該用戶沒有被授權後。在你的例子是您使用FormsAuthentication,我能夠通過提供在loginURL方法簽名,以改善這一點,現在運行的驗證方法,我也得到UserNot找到。所以我想知道是否有更好的方式來配置FormsAuthentication與WebAPI? –

+0

我沒有花時間這個,我應該(也會)。在這裏我的例子我劫持了[MVC 4 SPA模板(http://www.asp.net/single-page-application),其中有一個登錄和註冊UI一起去的Todo應用 – Ward

0

標記與[授權]的BreezeController時,然後試圖通過以下鏈接直接檢索微風元數據:

Request URL:http://localhost/breeze/breeze/metadata 

重定向到:

http://localhost/Login?ReturnUrl=%2Fbreeze%2Fbreeze%2Fmetadata with a 404 

沒有[授權]的訪問到相同的鏈接微風元數據工作正常。