如何保护JsonResult?

时间:2013-09-26 16:13:53

标签: asp.net-mvc json

this answer关于另一个问题的第一部分解释了现有MVC网站如何能够非常快速地向其添加公开其数据的能力(例如,向请求数据的Winforms应用程序),一对一对代码行(无需转换为WCF / Web API并添加额外的图层 - 我们的项目非常小且基本):

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 个答案:

答案 0 :(得分:1)

您应该将Web应用程序(返回登录的应用程序)的身份验证代码与您公开API的身份验证代码分开。

看起来您正在为WebSite部件使用表单身份验证,您应该保持这种方式。但是,在公共API GetCategoryList中,您应该使用ActionFilters实现不同的身份验证策略。