首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >到iis的帖子被重定向为使用相同的url获取。

到iis的帖子被重定向为使用相同的url获取。
EN

Stack Overflow用户
提问于 2015-02-20 20:35:19
回答 2查看 1.3K关注 0票数 0

我有一个ASP.NET MVC应用程序,它调用了我的Web (在同一个应用程序中)。在大多数情况下,这可以很好地工作,但对于这一种情况,当我试图发布一些数据时,我得到了一个状态代码为302的响应,它将我重定向到相同的URL,但现在使用get (这显然是失败的,因为这个API只接受POST)。

在反复讨论之后,我以一个简单的例子结束,其中用jquery.ajax()发出的帖子得到200,而用angularJS.http()发出的帖子得到302。

然后,我将我的代码部署到我们的开发服务器上,结果恰好相反。AngulasJS-POST获得200,而jQuery-POST获得302。所以我猜可能在调用和某些IIS设置中都有问题?我在本地和服务器上都在使用IIS 8.5。有什么想法吗?

下面是我用来测试的代码:

Web API

代码语言:javascript
复制
public class TestController : ApiController
{
    [HttpPost]
    public string Post()
    {
        return "ok from server";
    }
}

客户端代码:

代码语言:javascript
复制
    // jQuery - working -> Response: HTTP/1.1 200 OK
    $.ajax({
        type: "POST",
        url: "/my/api/test",
        data: JSON.stringify({ some: "data" }),
        contentType: "application/json;charset=utf-8",
        dataType: "json"
    });

    // Angular - not working -> Response: HTTP/1.1 302 Found (redirect location: /my/api/test)
    $http({
        method: "POST",
        url: "/my/api/test",
        data: { some: "data" }
    });

请求(在Fiddler中):

jQuery调用

代码语言:javascript
复制
POST http://localhost/my/api/test HTTP/1.1
Accept: application/json, text/javascript, */*; q=0.01
Content-Type: application/json;charset=utf-8
X-Requested-With: XMLHttpRequest
Referer: http://localhost/my/test
Accept-Language: nb-NO
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
Host: localhost
Content-Length: 15
DNT: 1
Connection: Keep-Alive
Pragma: no-cache
Cookie: FedAuth=77u/PD94bWwg...PjwvU2VjdXJpdHlDb250ZXh0VG9rZW4+; __utma=1.1704028259.1410177772.1421917753.1421924481.153; __utmz=1.1410177772.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); ASP.NET_SessionId=aig50hiuqza5bjs4nasq1h4q

{"some":"data"}

角度调用

代码语言:javascript
复制
POST http://localhost/my/api/test HTTP/1.1
Content-Type: application/json;charset=utf-8
Accept: application/json, text/plain, */*
Referer: http://localhost/my/test
Accept-Language: nb-NO
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
Connection: Keep-Alive
Content-Length: 15
DNT: 1
Host: localhost
Pragma: no-cache
Cookie: __utma=1.1704028259.1410177772.1421917753.1421924481.153; __utmz=1.1410177772.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); ASP.NET_SessionId=aig50hiuqza5bjs4nasq1h4q

{"some":"data"}
EN

回答 2

Stack Overflow用户

发布于 2015-02-20 20:40:10

尝试将[HttpPost]属性添加到控制器操作:

代码语言:javascript
复制
public class TestController : ApiController
{
    [HttpPost]
    public string Post()
    {
        return "ok from server";
    }
}
票数 0
EN

Stack Overflow用户

发布于 2015-02-20 23:10:16

我在请求中发现了一个不同之处,我怀疑这可能是答案。cookie包含一个用于授权的FedAuth token(我们使用WIF),这在所有失败的POST中都缺失(无论是jQuery还是AngularJS)。我还没有弄清楚为什么有时会包含,有时不会,但我认为这是导致重定向的原因(可能重定向到我们的LoginManager,但为什么它没有显示在302-响应我不知道)。

也许我应该发布一个新的问题,但有谁有建议,为什么这将包括在某些特定的呼叫?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28629172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档