servicestack Servicestack选项404和Cors原点
我正在做一个cors请求从我的 客户:servicestack Servicestack选项404和Cors原点,servicestack,cors,servicestack,Cors,我正在做一个cors请求从我的 客户:http://mypcname.companyname 到servicestack 服务器:http://mypcname.companyname:83/customersInformation 这就是javascript superagent库的请求: superagent.get(requestUrl) .set('Authorization', "basictoken " + getToken()) .set('
http://mypcname.companyname
到servicestack
服务器:http://mypcname.companyname:83/customersInformation
这就是javascript superagent库的请求:
superagent.get(requestUrl)
.set('Authorization', "basictoken " + getToken())
.set('Accept', 'application/json')
.end(function (response) {
});
这个get请求在Web API中完全可以正常工作!因此,在我看来,问题不可能是客户方
这是我的服务堆栈设置:
Plugins.Add(new CorsFeature(allowedOrigins: Settings.Default.SmartAllowedCorsOrigin, allowCredentials: true, allowedHeaders: "Content-Type, Authorization"));
RequestFilters.Add((httpReq, httpRes, requestDto) =>
{
if (httpReq.HttpMethod == "OPTIONS")
{
httpRes.End();
}
});
这就是我使用CustomerInformation数据设置类的方式:
[Route(RouteTemplate,"GET, OPTIONS",...)]
由于我使用了上面的选项请求过滤器,选项404错误消失了,但现在我遇到了更糟糕的情况…:
OPTIONS http://mypcname.companyname:83/customersInformation Origin http://mypcname.companyname is not allowed by Access-Control-Allow-Origin.
我必须在服务器端做什么才能使cors最终工作
更新
作为mythz问题的答案,获取响应头数据:
这是我使用cors插件上的默认值从服务器获得的响应原始数据:(fiddler原始选项卡)
google chrome中的错误:
OPTIONS http://mypcname.companyname:83/customersInformation Origin http://mypcname.companyname is not allowed by Access-Control-Allow-Origin.
应该在选项之后调用的Get方法(至少我是这么认为的)可能由于cors-origion错误,甚至之前发生的选项都不被允许,所以从未被命中
更新2
对服务器的请求:
OPTIONS http://mypcname.companyname:83/customersInformation HTTP/1.1
Host: mypcname.companyname:83
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
Access-Control-Request-Method: GET
Origin: http://mypcname.companyname
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
Access-Control-Request-Headers: accept, authorization, x-requested-with
Accept: */*
Referer: http://mypcname.companyname/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
当您保留默认的
allowedOrigins::
时,它是否工作?不,我得到了完全相同的错误。什么错误,404?如果是这种情况,则没有匹配的[Route]
允许选项
请求。使其自动处理所有选项请求,包括不匹配的路由或不存在的路由。顺便说一下,您打算使用httpRes.EndRequest()
而不是httpRes.End()
。不不,不,我没有得到404,在我使用请求筛选器后,其中一个路由消失了。我从上面得到了最后一个错误:访问控制Allow Origin不允许选项Origin。
OPTIONS http://mypcname.companyname:83/customersInformation HTTP/1.1
Host: mypcname.companyname:83
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
Access-Control-Request-Method: GET
Origin: http://mypcname.companyname
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
Access-Control-Request-Headers: accept, authorization, x-requested-with
Accept: */*
Referer: http://mypcname.companyname/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4