如何阻止仅对渲染文件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
,或者选择第二个选项。。