根据文档,我认为这是启用CORS所需的唯一行:
Plugins.Add(new CorsFeature());
然后从另一个网站:
var client = new JsonServiceClient('https://my-app.azurewebsites.net');
client.get(new something());
返回的错误是:
对预检请求的响应没有通过访问控制检查: “访问控制 - 允许 - 凭证”的价值'响应中的标头 是''''哪一定是真的'当请求的凭据模式是 '包括'
没有身份验证,我使用了所有默认设置,JsonServiceClient设置中缺少什么来调用其他服务器?
答案 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中有效。
请帮忙,我的错误是什么? 谢谢!
<强>更新强>
IIS设置