2016-09-11 30 views
2

我想将id传递给控制器​​(ASP.NET MVC 5)并从控制器获取结果。我有以下代码:将参数传递给Ajax安全方式

function LoadBook(id) { 
    $.ajax({ 
     url: '/Book/GetBookById' + id, 
     type: 'get', 
     dataType: 'json', 
     success: function (data) { 

     }, 
     error: function (err) { 
      alert("Error: " + err.responseText); 
     } 
    }) 
} 

它是安全做网址: '/书/ GetBookById' + ID?如果它不安全,有没有办法做到这一点?

+1

您需要对您的参数进行网址编码。 – SLaks

+0

如果你正在寻找一个RESTful的方式来做到这一点,你的URL应该看起来像'/ Book/[id]'或'/ Book/GetBookById/[id]'(第二种方式似乎对我来说是多余的)。非RESTful你可以做/ Book/GetBookById?id = [id]。也就是说,VS工具可以自动为你搭建这个脚手架。 – richb01

回答

1

的规定的方式做到这一点是:然后

public JsonResult GetBookById(int id) 
{ 
    // do your getting here 
    var yourdata = MyDataAccessClass.getBookById(id); 
    return new Json(yourdata, JsonRequestBehavior.AllowGet); 
} 

你的AJAX网址是:

function LoadBook(id) { 
$.ajax({ 
    url: '/Book/GetBookById/' + id, 
    type: 'get', 
    dataType: 'json', 
    success: function (data) { 

    }, 
    error: function (err) { 
     alert("Error: " + err.responseText); 
    } 
}) 
} 

这是 “安全”以及在Microsoft MVC中进行调用的标准方式。

+0

您仍然需要转义该参数。 – SLaks

+0

仅当它不是整数时。在我的例子中,所以不需要转义。当然,目前还不清楚OP代码中的数据类型是什么。 :-) – richb01

+0

@ richb01这是我所做的。谢谢! 也谢谢SLaks,我不知道编码参数使它更安全。但是每个人都可以解码它?因为我看到W3C上的编码表,编码如何使参数更安全? –

1

您需要使用

encodeURIComponent(Id)