如何阻止仅对渲染文件javascript的请求
我有一个使用用户名和密码创建令牌的控制器如何阻止仅对渲染文件javascript的请求,javascript,asp.net,asp.net-mvc,Javascript,Asp.net,Asp.net Mvc,我有一个使用用户名和密码创建令牌的控制器 [ChildActionOnly] public class TokenController : Controller { public JsonResult GetToken() { // get token from another site using username and password. return Json(new{token}, JsonRequestBehavior.AllowGe
[ChildActionOnly]
public class TokenController : Controller
{
public JsonResult GetToken()
{
// get token from another site using username and password.
return Json(new{token}, JsonRequestBehavior.AllowGet);
}
}
我正在创建此令牌以使用我的其他视图页面cshtml包含javascript代码的页面此代码调用Token/GetToken操作方法
我的家庭控制器是这样的
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
我的主页索引视图是这样的
<script type="text/javascript">
$(document).ready(function () {
$.ajax({
url: '/Token/Get',
success: function (response) {
console.log(response);
},
error: function() {
console.log(error);
}
});
});
</script>
$(文档).ready(函数(){
$.ajax({
url:“/Token/Get”,
成功:功能(响应){
控制台日志(响应);
},
错误:函数(){
console.log(错误);
}
});
});
当我运行此代码时,发生了以下错误500(内部服务器错误)
操作“Get”只能通过子请求访问。
但有人从浏览器中调用了此操作方法,他可以生成令牌。
这样地。有人通过WebClient调用了我的操作,可以生成令牌
我不想谈论这些案件。只有我的渲染文件javascript代码才应该使用我的令牌控制器。选项1: 仅使用
POST
方法阻止浏览器url获取请求
[HttpPost]
public ActionResult GetToken()
{
}
在jQuery中
$.post('/Token/GetToken/',{}, function(){});
或根据您更新的帖子
$(document).ready(function () {
$.ajax({
url: '/Token/Get',
method:'post', //ADD THIS LINE
success: function (response) {
console.log(response);
},
error: function() {
console.log(error);
}
});
});
选项2:
使用。这将确保url不能像浏览器或REST那样直接调用。但是必须像@Html.Action/RenderAction
那样访问它,您可以通过这种方式调用它,并在@Html.Raw
的帮助下将Json结果分配给某个javascript变量
[ChildActionOnly]
public ActionResult GetToken()
{
}
鉴于
<script type="text/javascript">
var claim='@Html.Raw(Html.Action("GetToken", "Token"))';
</script>
var claim='@Html.Raw(Html.Action(“GetToken”、“Token”));
@bookmarker,请仔细阅读我的答案。我给了你两个选择。。使用不带childactiononly的POST
,或者选择第二个选项。。