asp.net mvc jsonresult блок внешнего использования - PullRequest
0 голосов
/ 13 сентября 2011

Можно ли заблокировать любое другое использование результата json и разрешить только запросы из моего приложения? когда мы используем что-то вроде этого:

Json(q, JsonRequestBehavior.AllowGet)

разрешает все запросы из любого места. Существует ли какая-либо аутентификация для проверки, откуда поступил запрос?

Ответы [ 3 ]

2 голосов
/ 13 сентября 2011

Я думаю, вы имеете в виду:

Как разрешить только запросы AJAX?

Если это так, просмотрите следующую запись блога.Он описывает создание многоразового фильтра:

Атрибут AjaxOnly

Код кажется довольно простым, но я сам не использовал его:

public class AjaxOnlyAttribute : ActionFilterAttribute  
{  
    public override void OnActionExecuting(ActionExecutingContext filterContext)  
    {  
        if(!filterContext.HttpContext.Request.IsAjaxRequest())  
            filterContext.HttpContext.Response.Redirect("/error/404");  
    }  

    public override void OnActionExecuted(ActionExecutedContext filterContext)  
    {  

    }  
} 

То, что вы затем можете применить к контроллерам и действиям:

[AjaxOnly]  
public ActionResult AjaxActionMethod()  
{  
    //....  
}

Код фильтра предполагает наличие действия на некотором контроллере, которое может быть достигнуто по следующему маршруту:

/error/404

В результате я изменил код и создал простой способ добавления маршрута произвольной ошибки (со значением по умолчанию "/ error / 404"):

public class AjaxOnlyAttribute : ActionFilterAttribute
{
    public AjaxOnlyAttribute(){}

    public AjaxOnlyAttribute(string ErrorRoute)
    {
        this.ErrorRoute = ErrorRoute;
    }

    string errorRoute = "/Error/404"; // default route
    public string ErrorRoute 
    {
        get { return errorRoute; }
        set { errorRoute = value; }
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!filterContext.HttpContext.Request.IsAjaxRequest())
            filterContext.HttpContext.Response.Redirect(this.ErrorRoute); //
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {

    }
}

Теперь это можно использовать какследует:

[AjaxOnly(ErrorRoute = "/MyArbitraryRoute/MyArbitraryParameter")
public ActionResult AjaxActionMethod()
{
   //....
}
1 голос
/ 13 сентября 2011

Добавьте атрибут [Authorize] к вашим методам или контроллерам, которые вы хотите защитить. Вы можете указать членство в группе, и вам потребуется логин.

0 голосов
/ 13 сентября 2011

Если вы хотите, чтобы метод вызывался только вашим собственным приложением, измените объявление метода с открытого на внутреннее.Это ограничит область применения метода вызовами из вашего приложения.

...