Tom*_*ski 9 cors asp.net-core-mvc asp.net-core
我正在使用带有Asp核心web api的Angular 4应用程序,我在locahost上测试了不同的端口.我的WebApi需要Windows身份验证(需要获取登录用户名).所有使用GET的调用工作,但不幸的是,我无法让POST工作.我有CORS的WebApi设置:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.AddDbContext<CatalogContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddCors(options =>
{
options.AddPolicy("AllowAll", builder =>
{
builder.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials();
});
});
services.AddMvc();
}
Run Code Online (Sandbox Code Playgroud)
而angular 4客户端正试图发布文件
fileChange(event) {
let fileList: FileList = event.target.files;
if (fileList.length > 0) {
let file: File = fileList[0];
let formData: FormData = new FormData();
formData.append('uploadFile', file, file.name);
let headers = new Headers();
/** No need to include Content-Type in Angular 4 */
headers.append('Content-Type', 'multipart/form-data');
headers.append('Accept', 'application/json');
let options = new RequestOptions({ headers: headers, withCredentials: true });
this.http.post("http://localhost:495/api//upload",formData, options)
.map(res => res.json())
.catch(error => Observable.throw(error))
.subscribe(
data => console.log('success'),
error => console.log(error)
)
}
Run Code Online (Sandbox Code Playgroud)
我的错误:
XMLHttpRequest无法加载http:// localhost:495/api // upload.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许来源' http:// localhost:4200 '访问.响应的HTTP状态代码为500.
和响应标头
内容长度:0日期:孙老师,2017年8月13日13时13分09秒GMT持久验证:真服务器:红隼X-已启动方式:ASP.NET X-SourceFiles:= UTF-的8B QzpcU291cmNlIENvZGVcUGFydG5lcnNoaXBDYXRhbG9nXFBhcnRuZXJzaGlwQ2F0YWxvZ1xQYXJ0bmVyc2hpcENhdGFsb2cuV2ViQXBpXGFwaVx1cGxvYWQ =??? =
任何帮助,将不胜感激!
预检请求 (OPTIONS) 不会将身份验证信息发送到服务器。因此,除了 WinAuth 之外,您还需要启用匿名身份验证。请参阅:https : //stackoverflow.com/a/50354772/946773
你需要这样的东西:
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder =>
builder.AllowAnyOrigin()
.AllowAnyMethod()
.WithExposedHeaders("content-disposition")
.AllowAnyHeader()
.AllowCredentials()
.SetPreflightMaxAge(TimeSpan.FromSeconds(3600)));
});
Run Code Online (Sandbox Code Playgroud)
注意AllowCredentials()
。
您还需要在Startup
文件Configure
方法中:
app.UseCors("CorsPolicy");
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3789 次 |
最近记录: |