Web API OWIN从$ .AJAX POST withCredentials:true接收空数据

时间:2017-04-14 16:25:07

标签: jquery ajax post asp.net-web-api windows-integrated-auth

我通过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始终为空。

1 个答案:

答案 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);
    });
}

如果有人知道原因,请发表回复。谢谢!