【发布时间】:2015-12-29 20:14:35
【问题描述】:
在 ASP.NET MVC 项目中,我有一个接受 POST 请求的控制器方法,如下所示(为了完整性,使用“User”类):
[HttpPost]
public ActionResult TestMethod(User user)
{
return Content("It worked");
}
public class User
{
public string Name { get; set; }
public string Email { get; set; }
}
我用 jQuery Ajax 调用这个方法:
$.ajax({
url: '/test/TestMethod/',
data: JSON.stringify({ user: { name: 'NewUserName', email: 'username@email.com' } }),
type: 'POST',
success: function (data) {
alert(data);
},
error: function (xhr) {
alert('error');
}
});
当我创建一个新的 ASP.NET MVC 项目并将此代码包含在一个新的测试控制器中时,一切正常。通过 Fiddler 查看,发出了一个 POST 请求,我得到了控制器方法的返回值。
但是,当我在我正在开发的当前 MVC 项目中运行此代码时,它不起作用。从 Fiddler 我看到 ajax 调用首先启动了一个 POST 方法,该方法得到一个 301 http 状态错误(“永久移动”?)。之后立即发出 GET 请求,这会生成 404 not found 错误(这是有道理的,因为没有可用的此名称的 GET 操作方法)。
所以我在新项目和现有项目中使用完全相同的代码,但代码仅在新项目中有效。很明显,我现有的项目有些东西会以某种方式阻止它正常运行(并导致生成 POST 和 GET 请求的奇怪行为)。但我不知道它可能是什么,所以欢迎任何建议......!
更新-路由信息:
public static void RegisterRoutes(RouteCollection routes)
{
routes.AppendTrailingSlash = true;
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}
更新 2: 看起来此问题是由为此项目打开的内容安全策略设置引起的。
【问题讨论】:
-
您是否检查了“网络”选项卡以查看请愿书是否指向正确的网址?
-
网址看起来不错:localhost:44060/test/testmethod
-
您是否为这个现有项目和新项目启用了任何自定义 ASP.NET 路由?
-
firebug 没有显示任何错误?
-
在萤火虫中我首先得到一个错误“POST localhost:61330/test/TestMethod 301 Moved Permanently”,然后是“GET localhost:61330/test/TestMethod 404 Not Found”
标签: javascript jquery ajax asp.net-mvc-4 http