Ajax Post 到 Web API 成功但是.. 当托管在默认网站 (IIS) 上时在客户端失败
Ajax Post to Web API succeeds but.. fails on client side when hosted on Default Web Site (IIS)
我有一个奇怪的问题:我有一个客户端应用程序 (jquery) 运行 针对同一域中的 WebAPI。当我在本地计算机的 IIS 上托管它时,作为根网站(站点->MyApp),它工作正常(Get 和 Post)。典型的 API 调用如下所示:
$.get("api/GetList", null, function (data) {
var list = data;
})
但是,当我在 IIS 中将其作为子应用程序托管在 "Default Web Site" 下时,典型的 API 调用如下所示:
$.get("MyApp/api/GetList", null, function (data) {
var list = data;
})
所有 GET 调用都工作正常,但 POST 调用行为怪异。我像这样打 POST 电话:
$.ajax({
url: "MyApp/api/Fields",
type: 'POST',
dataType: 'json',
contentType: false,
cache: false,
processData: false,
data: data,
success: function (res) {
var x = res;
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
//
}
});
Web api 方法如下所示:
[HttpPost]
[Route("api/Fields")]
public async Task<IHttpActionResult> Post() {...
当我执行 POST 调用时,它到达服务器并且服务器方法工作正常,但是当它 returns 时我得到一个错误。从这里:http://localhost/MyApp/index.html 我点击提交按钮并得到这个(即使在服务器端操作成功!!):
HTTP 错误 404.0 - 未找到
请求 URL http://localhost:80/api/Fields?input_1=sometext
如您所见,到 MyApp 的路由消失了,IIS 将请求视为 GET ,尽管我做了 POST!!和 returns 到根:默认网站而不是返回到 localhost/MyApp ..
相同的代码 1:1 when 运行 在具有相同配置的 IIS 测试服务器上工作正常,没有此错误。
有什么想法吗?
网上查了无数遍都没有答案,突然看到Form标签里有一个action属性!:
<form id="Id" name="Name" action="api/action" enctype="multipart/form-data" novalidate>
一旦我删除了 action 属性,它就解决了额外的 api 调用。但我还必须防止表单的默认行为。所以我把 Ajax Post Api 调用放在 $(document).ready 函数中,如下所示:
jQuery(function ($) {
var frm = $('#FormId');
frm.submit(function (ev) {
ev.preventDefault();
//do validation etc..
//do Ajax Post
$.ajax({
url: "api/Fields/",
method: 'POST',
dataType: 'json',
contentType: false,...
});
return false;
});
});
不要忘记阻止表单默认行为!
我有一个奇怪的问题:我有一个客户端应用程序 (jquery) 运行 针对同一域中的 WebAPI。当我在本地计算机的 IIS 上托管它时,作为根网站(站点->MyApp),它工作正常(Get 和 Post)。典型的 API 调用如下所示:
$.get("api/GetList", null, function (data) {
var list = data;
})
但是,当我在 IIS 中将其作为子应用程序托管在 "Default Web Site" 下时,典型的 API 调用如下所示:
$.get("MyApp/api/GetList", null, function (data) {
var list = data;
})
所有 GET 调用都工作正常,但 POST 调用行为怪异。我像这样打 POST 电话:
$.ajax({
url: "MyApp/api/Fields",
type: 'POST',
dataType: 'json',
contentType: false,
cache: false,
processData: false,
data: data,
success: function (res) {
var x = res;
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
//
}
});
Web api 方法如下所示:
[HttpPost]
[Route("api/Fields")]
public async Task<IHttpActionResult> Post() {...
当我执行 POST 调用时,它到达服务器并且服务器方法工作正常,但是当它 returns 时我得到一个错误。从这里:http://localhost/MyApp/index.html 我点击提交按钮并得到这个(即使在服务器端操作成功!!): HTTP 错误 404.0 - 未找到 请求 URL http://localhost:80/api/Fields?input_1=sometext
如您所见,到 MyApp 的路由消失了,IIS 将请求视为 GET ,尽管我做了 POST!!和 returns 到根:默认网站而不是返回到 localhost/MyApp ..
相同的代码 1:1 when 运行 在具有相同配置的 IIS 测试服务器上工作正常,没有此错误。 有什么想法吗?
网上查了无数遍都没有答案,突然看到Form标签里有一个action属性!:
<form id="Id" name="Name" action="api/action" enctype="multipart/form-data" novalidate>
一旦我删除了 action 属性,它就解决了额外的 api 调用。但我还必须防止表单的默认行为。所以我把 Ajax Post Api 调用放在 $(document).ready 函数中,如下所示:
jQuery(function ($) {
var frm = $('#FormId');
frm.submit(function (ev) {
ev.preventDefault();
//do validation etc..
//do Ajax Post
$.ajax({
url: "api/Fields/",
method: 'POST',
dataType: 'json',
contentType: false,...
});
return false;
});
});
不要忘记阻止表单默认行为!