首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >角2 http post方法失败

角2 http post方法失败
EN

Stack Overflow用户
提问于 2017-01-01 17:28:57
回答 3查看 4.1K关注 0票数 0

我正在尝试使用angularJS 2 http的post方法。

我的休息电话如下:

代码语言:javascript
运行
复制
saveCourse(Course: any) {
    let url ='https://server/CoursesWebApi/api/courses/insert';
    let headers = new Headers();
    headers.append('Content-Type', 'application/json');
    headers.append('Accept', 'application/json');
    let options = new RequestOptions({ headers: headers});
    return this._http.post(url, { data: Course }, options)
        .toPromise()
        .then(res => res.json().data)
        .catch((err: any) => {
            console.log(err);
            return Promise.reject(err);
        });
}

当字符串化时,课程对象如下所示:

{“标题”:“测试标题”,“AuthorId”:“Software”,“类别”:“软件体系结构”,"CourseLength":"2","CourseId":"test-id"}“

我试过了紧张版和非紧张版。在使用chrome进行调试时,两个版本都会出现以下错误:

响应状态:0表示URL: null

据我所知,0(0)的状态意味着它从未到达webapi服务器。我启用了CORS,并且在示例reactJS应用程序中使用了类似的方法,使用了axios并调用了相同的webapi,它可以工作。我安装了失眠症json工具,并使用以下json格式执行了post,它起了作用:

{ "CourseId":"steve","AuthorId":"cory-house","Title":"Test Title","CourseLength":"12:40",“AuthorId”:"Test类别“}

我不知道我做错了什么。我的asp.net webapi是这样的:

代码语言:javascript
运行
复制
[HttpPost]
[Route("CoursesWebApi/api/courses/insert/")]
public IActionResult PostCourse([FromBody] Course course)
{
    if (!ModelState.IsValid)
    {
        return HttpBadRequest(ModelState);
    }

    _context.Course.Add(course);
    try
    {
        _context.SaveChanges();
    }
    catch (DbUpdateException)
    {
        if (CourseExists(course.CourseId))
        {
            return new HttpStatusCodeResult(StatusCodes.Status409Conflict);
        }
        else
        {
            throw;
        }
    }

    return Ok();
}

最后,当我使用fiddler时,我在web上看到了以下错误:

HTTP/1.1 400坏请求内容-类型: application/json;charset=utf-8 Server: Kestrel X驱动-By: ASP.NET访问-控制-允许-来源:*访问-控制-允许-标题:内容-类型,接受,X请求-与,X-文件-名称访问-控制-允许-方法:获取,发布日期: Sun,2017年1月1日16:15 GMT内容-长度: 37 {“”:“不支持的内容类型‘’”}

我尝试过许多不同的post方法,但都没有效果。为此工作了三天,所以任何帮助都是非常感谢的。

编辑I无法解决这个问题。我的web使用了新的asp.net核心和EF 7,我用EF 6和ASP.Net 4.5.2重写了它,它工作了。我怀疑我的web中有什么东西是导致这个问题的原因。

EN

回答 3

Stack Overflow用户

发布于 2017-01-01 18:03:35

压缩数据

代码语言:javascript
运行
复制
var body = JSON.stringify(Course);

在发送之前

代码语言:javascript
运行
复制
_http.post(url, body, options)

还删除[FromBody]属性。它用于从复杂对象中提取简单类型。

参考资料:ASP.NET Web中的参数绑定

行动会以这样的结果结束

代码语言:javascript
运行
复制
[HttpPost]
[Route("CoursesWebApi/api/courses/insert/")]
public IActionResult PostCourse(Course course) { ... }
票数 1
EN

Stack Overflow用户

发布于 2017-01-01 17:53:14

您需要在正文中发送数据,因为PostCourse api方法将在FromBody中查看。

代码语言:javascript
运行
复制
            //public IActionResult PostCourse([FromBody] Course course)

下面是一个使用可观察到的例子:

代码语言:javascript
运行
复制
            public saveCourse(Course: any): Observable<Course> {
                    let url ='https://server/CoursesWebApi/api/courses/insert';
                    let body: string = JSON.stringify(Course);
                    let  headers = new Headers();
                    let headers.append('Content-Type', 'application/json');
                    let options = new RequestOptions({ headers: this.headers });

                    return this.authHttp.put(this.url, body,options)
                        .map((res: Response) => {
                                    return res;
                                })
                            .catch((error: any) => {
                                // Error on post request.
                                return Observable.throw(error);
                        });
                }
票数 0
EN

Stack Overflow用户

发布于 2017-01-01 23:14:08

如果您已经启用了chrome中的CORS,尝试将访问控制-允许-原产地,*添加到您的标题。也有类似的问题,这很有帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41417446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档