ServiceStack Javascript / Typescript客户端和CORS

时间:2017-02-28 02:43:21

标签: cors servicestack

根据文档,我认为这是启用CORS所需的唯一行:

Plugins.Add(new CorsFeature());

然后从另一个网站:

var client = new JsonServiceClient('https://my-app.azurewebsites.net');
client.get(new something());

返回的错误是:

  

对预检请求的响应没有通过访问控制检查:   “访问控制 - 允许 - 凭证”的价值'响应中的标头   是''''哪一定是真的'当请求的凭据模式是   '包括'

没有身份验证,我使用了所有默认设置,JsonServiceClient设置中缺少什么来调用其他服务器?

3 个答案:

答案 0 :(得分:4)

CorsFeature的默认设置不允许启用凭据。尝试将服务器更改为以下内容。

Plugins.Add(new CorsFeature(allowCredentials: true));

如果您尝试点击要求发送凭据的端点,客户端将需要包含凭据。

编辑: 鉴于(我认为)你试图从另一个域git一个经过身份验证的端点,这里是我用来做同样事情的一个例子。域已被更改。

Plugins.Add(new CorsFeature(
    allowCredentials: true,
    allowedHeaders: "Content-Type, Allow, Authorization, Origin",
    allowOriginWhitelist: new[]
    {
        "https://example.com",
        "https://api.example.com",
        "https://www.example.com",
        "http://dev.example.com"
    }
));

答案 1 :(得分:3)

问题最终出现在JsonServiceClient上。我必须设置要省略的凭据。

client.credentials="omit"

答案 2 :(得分:2)

我如上所述配置了服务:

Plugins.Add(new CorsFeature(
      allowCredentials: true,
      allowedMethods: "GET, POST, PUT, DELETE, OPTIONS",
      allowedHeaders: "Content-Type, Allow, Authorization, Origin",
      allowOriginWhitelist: new[]
             {
                    "http://localhost:4200",
                    "http://localhost:63342",
                    "http://localhost:63342",
                    "http://localhost:3000",
                    "http://my.site.com"
             }));

我有2个函数Login()和GetContacts()

class AppComponent {
***
      constructor(){
        this.client = new JsonServiceClient("http://my.site.com");
        this.client.credentials = "omit";
      }

      async Login(){

        var auth = new wbs.Authenticate();
        auth.UserName = this.username;
        auth.Password = this.password;

        var authResponse = await this.client.post(auth);

        console.log(authResponse);
      }

      async GetContacts(){
        try {
          this.contacts = await this.client.post("Contacts_Get");
          console.log(this.contacts);
        } catch(e) {
          this.contacts = [];
          console.log("Failed to get:", e.responseStatus);
        }
      }
}

“servicestack-client”:“0.0.30”,

我依次调用这些函数:

1. Login()
2. ContactsGet()

登录运行正常,但在Internet explorere和Safari ContactsGet失败时,它返回状态401,但在Chrome中有效。

请帮忙,我的错误是什么? 谢谢!

enter image description here

enter image description here

enter image description here

<强>更新

IIS设置

enter image description here