Web API OWIN 从 $.AJAX POST withCredentials:true 接收空数据
Posted
技术标签:
【中文标题】Web API OWIN 从 $.AJAX POST withCredentials:true 接收空数据【英文标题】:Web API OWIN receives null data from $.AJAX POST withCredentials:true 【发布时间】:2017-09-10 22:40:44 【问题描述】:我正在通过 OWIN 调用托管在 Windows 服务上的 Web API,并使用来自 ASP.NET MVC 应用程序的 jquery ajax 发布(通过“数据”选项发布数据)。在我决定添加集成的 Windows 身份验证之前,它一直在工作。我在 $.ajax 调用中添加了 xhrFields: withCredentials: true 以完成客户端的身份验证。现在返回的数据为空。
这是我的服务器端启动:
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 始终为空。
【问题讨论】:
【参考方案1】:嗯,我找到了答案,这很简单,但我仍然不知道幕后的细节,为什么会这样。只需将“data:'test'”修改为“data:'':'test'”即可。
function TestAjax()
$.ajax(
url: 'http://localhost:8080/api/Test/PostSomething',
xhrFields: withCredentials: true ,
type: 'post',
data: '': 'test'
).done(function (response)
alert(response);
);
如果有人知道原因,请回复。谢谢!
【讨论】:
以上是关于Web API OWIN 从 $.AJAX POST withCredentials:true 接收空数据的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET (OWIN) Identity:如何从 Web API 控制器获取 UserID?
Asp.Net Web API 2第十课——使用OWIN自承载Web API
如何从桌面应用程序登录到 OWIN Web Api 2 WS-Federation 服务器
Use OWIN to Self-Host ASP.NET Web API 2