Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检测和拒绝向MVC控制器发送的非JavaScript帖子_Javascript_Asp.net Mvc_Jquery - Fatal编程技术网

如何检测和拒绝向MVC控制器发送的非JavaScript帖子

如何检测和拒绝向MVC控制器发送的非JavaScript帖子,javascript,asp.net-mvc,jquery,Javascript,Asp.net Mvc,Jquery,有没有一种简单的方法可以检测并拒绝向MVC控制器发送的非JavaScript帖子 假设我有一些JavaScript通过Ajax提交表单: function SubmitForm() { var data = $("form").serialize(); $.post("/MyController/MyAction/", data, function(data, response){ //Process response }); return false;

有没有一种简单的方法可以检测并拒绝向MVC控制器发送的非JavaScript帖子

假设我有一些JavaScript通过Ajax提交表单:

function SubmitForm()
{
   var data = $("form").serialize();

   $.post("/MyController/MyAction/", data, function(data, response){
       //Process response
   });

   return false;
}
如果用户禁用JavaScript,表单仍将通过标准表单post发布到控制器。我知道我不能停止它的发布,但是我可以检测并拒绝来自控制器的非JavaScript发布,并将用户发送到错误页面吗


我也知道这可能不是控制器功能的标准部分,所以我想知道是否有人想出了实现这一点的窍门。

在控制器中检查jquery随ajax请求发送的头

if($_SERVER['HTTP_X_REQUESTED_WITH'] !='XMLHttpRequest'){
   die();
}
编辑:刚刚意识到您使用的不是PHP而是asp.net。不过你也应该能做同样的事情


由balexandre添加

if( Request.ServerVariables["HTTP_X_REQUESTED_WITH"].ToLower() != "xmlhttprequest" )
    return RedirectToAction("Failed");
但在.NET中有一个更好的方法:

if( !Request.IsAjaxRequest )
    return RedirectToAction("Failed");

if(!Request.IsAjaxRequest)返回RedirectToAction(“YourBankedAction”)

将表单方法设置为“get”如何?然后,您可以在服务器端轻松地检测该方法,并且仅当该方法是post时才进行处理

<form method="get">
...
</form>

...

编辑:选中serialize()函数docs,它实际上并不要求您的输入在表单中。只要您有选择它们的方法,例如一个封闭的div。这也是一个选项。

您可以使用JavaScript向表单添加一个特定的隐藏输入:

$('#your_form').append('<input type="hidden" name="got_js" value="1"/>');

您应该在控制器操作上使用ActionFilter

[仅限AjaxOnly] 公共操作结果AjaxActionMethod() { .... }


这不是现成的,所以你需要自己写。你可以找到一个很好的例子

嘿,谢谢你的快速回复,不过我更喜欢Asp.NET-MVC特定的答案:-)是的,很抱歉,我实际上还在学习Asp.NET,所以谢谢@balexandre的edit.omg!非常感谢!我没有意识到事情会这么简单:-)嘿@mu太短了-谢谢你的回答-我本来想沿着这条路走,但似乎有一些更简单的方法-看看@Tahbaza的答案不管怎样,我只是增加了更多的选择。我猜Tahbaza只是围绕派拉蒙的
HTTP\u X\u REQUESTED\u的ASP.net包装,带有
头检查,总是很好地了解所有包装下面的内容。不过,我认为这是另一个问题的正确答案,如何检测服务器端启用的js。。。我认为你的代码加上在文档的onReady上调用$(“你的表单”).submit()就可以了。我收回这一点。我想我觉得这很奇怪,因为我通常根本不会将要发布的输入放在表单中,而是将输入拉到javascript对象中并作为json发布。必须离开我自己的小世界:-)
var data = $("form").serialize();
data = data ? data + '&got_js=1' : 'got_js=1';