我有一个带有HomeController,ContactController等控制器的ASP.NET MVC 4应用程序,它匹配常规网站页面(视图)等。
我有一个名为 LogicController 的特殊控制器,在这个控制器中,我的所有业务逻辑都以函数和过程的形式存在,通常返回JSON对象。
我通过使用对/ Logic / FunctionName的jQuery Ajax调用来使用这个逻辑。
例如,如果我想获得我将使用的所有客户的列表/ Logic / GetCustomerList,它反过来返回JSON格式的客户列表。
$.ajax({
type: "POST",
url: "/Logic/GetCustomerList",
async: true
});
这里没什么新东西。
现在,如果在我的网络浏览器中我导航到www.mywebsite.com/Logic/GetCustomerList,我怀疑是否会获得在浏览器中呈现的客户列表(JSON)。
所以我的问题是如何保护对这个控制器的访问,所以只有来自应用程序内部的调用(通过jquery ajax)可以命中控制器,但是在这种情况下“外部”或直接调用会被拒绝?
答案 0 :(得分:0)
此外,如果只有登录用户可以访问此方法,您可以使用
进行装饰[Authorize]
或者,如果所有操作只能由登录用户访问,则可以使用此属性修饰整个类。
答案 1 :(得分:0)
这是一种确保您的操作只能由Ajax调用访问的简单方法(至少对于没有如何创建手动HTTP调用的技术知识的任何人):
using System.Web.Mvc;
public class AjaxOnlyAttribute : ActionMethodSelectorAttribute
{
public override bool IsValidForRequest(
ControllerContext controllerContext,
MethodInfo methodInfo)
{
return controllerContext.HttpContext.Request.IsAjaxRequest();
}
}
现在您可以使用新属性简单地修饰您的操作方法:
[AjaxOnly]
public ActionResult DoStuff()
{
//snip
}