2013-09-26 109 views
0

關於另一個問題this answer的第一部分解釋了現有MVC網站如何能夠非常快速地向其添加公開其數據(例如,向Winforms應用程序請求數據)的能力,所有這些都是爲了幾行代碼(無需轉換到WCF /網絡API和添加額外的圖層 - 我們的項目是非常小的和基本):如何保護JsonResult?

public JsonResult GetCategoryList() 
{ 
    var list = //return list 
    return Json(list, JsonRequestBehavior.AllowGet); 
} 

所以我們測試過上述作爲一個快速簡便的解決方案,它顯然是非常近的工作,因爲在流中,我們獲得了MVC應用程序登錄的html源代碼。

事實上,如果我們添加AllowAnonymous註釋,我們得到我們之後的Json流。

但是我們不想讓匿名,我們想要一些保護。是否嘗試過加入:

Dim nc As New NetworkCredential("username", "password") 
    request.Credentials = nc 

剛燒製request.GetResponse之前,但不工作(這可能是完全不知道,但它似乎值得一試)。當我說它不工作時,我的意思是我們回到獲取流中的登錄頁面的html源代碼。

那麼如何讓winforms應用程序通過其對數據的請求來實現某種認證(這將起作用)呢?正如我所說,獲取數據正在工作(由AllowAnonymous證明)。

回答

1

您應該將Web應用程序(返回登錄名的應用程序)的身份驗證代碼與正在公開該API的身份驗證代碼分開。

看起來你使用WebSite部分的表單身份驗證,你應該保持這種方式。但是,在公共API GetCategoryList中,您應該例如使用ActionFilters實現不同的身份驗證策略。

+0

如果我使用ActionFilter註釋GetCategoryList操作,例如 isnt仍然期待表單身份驗證?這是如何改變其「傾聽」來自winforms應用程序的請求的意願? – hawbsl

+0

您可以通過使用web.config中的標籤或在控制器文件夾中創建另一個web.config來像這裏解釋的那樣禁用控制器位置的FormsAuth(http://stackoverflow.com/questions/3750917/mvc-authentication-繞過單個控制器操作),所以它不會通過這些路由中的FormsAuth,或者可以將Api控制器放入IIS中另一個網站/應用程序中的另一個項目中。 – tucaz