javascript - 使用 Angular 和 ASP WEB API CORE 上传文件?

标签 javascript asp.net angularjs json asp.net-web-api2

我有 CORS 策略,可以很好地处理所有请求(使用 content-type:application/json)。但是当我尝试上传文件并使用 content-type:multipart/form-data 时出现错误:

XMLHttpRequest 无法加载 http://localhost:20377/api/posts。请求的资源上不存在“Access-Control-Allow-Origin” header 。因此,不允许访问源“http://localhost:4200”。响应的 HTTP 状态代码为 500。

我不明白为什么这不适用于 multipart/form-data 但适用于 application/json。 这是代码: Startup.cs 中的策略设置

 services.AddCors(options =>
        {
            options.AddPolicy("CorsPolicy",
                builder => builder.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader()
                .AllowCredentials());
        });

Angular 方法:

public createPost(title: string, body: string, file:File) {
    const token = this.authService.getToken();
    let formData: FormData = new FormData();
   
    formData.append('File', file, file.name);
    formData.append('Title', title);
    formData.append('Body', body);
    console.log(formData);
    return this.http.post('http://localhost:20377/api/posts', formData,
        {headers: new Headers({'Content-Type': 'multipart/form-data'})})
        .map(res => {
            console.log(res);
        });

Web API 核心 Controller :

    [EnableCors("CorsPolicy")]
    [HttpPost]
    public IActionResult CreatePost([FromBody] PostCreate model)
    {
        return Ok(model.Body);
    }

最佳答案

已解决

我的错误在于我在 Controller 操作中传递 FormBody 数据,而没有在我的 Angular 请求中传递任何 header 。 需要更改:

    [HttpPost]
    public IActionResult CreatePost([FromForm] PostCreate model)
    {
        return Ok(model);
    }

还有 Angular

    return this.http.post('http://localhost:20377/api/posts', formData)
        .map(res => {
            console.log(res);

关于javascript - 使用 Angular 和 ASP WEB API CORE 上传文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44294669/

相关文章:

javascript - 比较日期 JavaScript

asp.net - 使用多个子域会加快我的网站速度吗?

javascript - 如何在angular2中通过id引用模板?

javascript - firebug 可以告诉我对象的 javascript 名称吗?

javascript - 调用路由时如何传递变量?

javascript - 访问附加元素的对象

asp.net - 如何获取当前页面的html?

javascript - 如何使用 Angular Material 的 $mddialog 服务中的 typescript 在 IDialogOptions 中设置解析签名

google-app-engine - 寻找一种使用ajax使用angularjs将文件上传到应用程序引擎的方法

javascript - 如果元素包含该名称,则使用 'for' 循环从元素中删除类名称,否则什么也不做