我通过OWIN调用托管在Windows服务上的Web API,使用来自ASP.NET MVC应用程序的jquery ajax帖子(通过“data”选项发布数据)。它一直在工作,直到我决定添加集成的Windows身份验证。我将xhrFields:{withCredentials:true}添加到$ .ajax调用以完成身份验证的客户端。现在返回的数据为空。
这是我的服务器端启动:
public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
var config = new HttpConfiguration();
var listener =
(HttpListener)appBuilder.Properties["System.Net.HttpListener"];
listener.AuthenticationSchemes = AuthenticationSchemes.IntegratedWindowsAuthentication;
//Maps Http routes based on attributes
config.MapHttpAttributeRoutes();
config.Filters.Add(new AuthorizeAttribute());
//Enable WebApi
var cors = new EnableCorsAttribute("*", "*", "*");
cors.SupportsCredentials = true;
config.EnableCors(cors);
appBuilder.UseWebApi(config);
}
}
以下是Web API方法:
public HttpResponseMessage PostSomething([FromBody] string dataIn)
仅供参考,字符串可能太大而无法在URI上传递。
这是$ .ajax电话:
function TestAjax() {
$.ajax({
url: 'http://localhost:8080/api/Test/PostSomething',
xhrFields: { withCredentials: true },
type: 'post',
data: 'test'
}).done(function (response) {
alert(response);
});
}
dataIn始终为空。
答案 0 :(得分:0)
嗯,我找到了答案,这很简单,但我仍然不知道幕后细节为什么会这样。只需修改"数据:' test'"成为"数据:{'':' test'}"。
function TestAjax() {
$.ajax({
url: 'http://localhost:8080/api/Test/PostSomething',
xhrFields: { withCredentials: true },
type: 'post',
data: { '': 'test' }
}).done(function (response) {
alert(response);
});
}
如果有人知道原因,请发表回复。谢谢!