我有一个.net Web API托管在使用Windows身份验证的远程服务器上的IIS 7上。我想使用使用TypeScript和节点来访问网络api。早些时候,我收到一个错误“回应预检要求未通过访问控制检查:没有‘访问控制允许来源’标头出现在所请求的资源”我说这对托管应用程序的Angular 2 - 使用Windows身份验证消费平静的API呼叫
web.config中
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
但现在我得到未经授权的401错误。我已阅读有关添加以下代码以允许跨域访问 - 但我不知道我在哪里添加角2应用程序以及如何编译。
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
app.get('/', function(req, res, next) {
// Handle the get for this route
});
app.post('/', function(req, res, next) {
// Handle the post for this route
});
这里是服务的示例代码中,我试图使获得与
@Injectable()
export class TodoService {
todos$: Observable<Todo[]>;
private _baseUrl: string;
private _todosObserver: Observer<Todo[]>;
private _dataStore: {
todos: Todo[]
};
constructor(private _http: Http) {
//let headers: Headers = new Headers();
this._baseUrl = 'http:/SampleServer/Server/api/LoadTodo';
this.todos$ = new Observable(observer => this._todosObserver = observer).share();
this._dataStore = { todos: [] };
}
loadTodos() {
let headers: Headers = new Headers();
//headers.append('Access-Control-Allow-Origin');
headers.append('Authorization', 'Basic ' +
btoa('username:password'));
//let opts: RequestOptions = new RequestOptions();
//opts.headers = headers;
this._http.get(`${this._baseUrl}`,headers).map(response => response.json()).subscribe(data => {
this._dataStore.todos = data;
this._todosObserver.next(this._dataStore.todos);
}, error => console.log('Could not load todos.'));
}
任何帮助呼吁解决这一问题将是巨大的。
我不知道Windows身份验证,但上面的代码'res.header(“访问...'不相同因为你的'web.config'发生了变化,你不需要在客户端使用它,我不认为“Basic ....”是传递Windows身份验证凭证的正确方式,我认为浏览器提供了这个自动和只需要在服务器端处理一切。另见https://technet.microsoft.com/en-us/library/cc732841.aspx –
删除“基本...”给出了相同的401错误 - 未经授权访问。 –
您的问题stion似乎表明你得到与“Basic ...”相同的错误“我很确定你的问题需要一个服务器端解决方案,我在之前的评论中提到的链接指出,浏览器从来没有获得用户凭证(用户名,密码),所以试图发送它们的地点在哪里 –