为什么这个http请求在角度4中失败,但与fiddler一起通过?

时间:2017-06-16 18:09:08

标签: angular angular-router

我通过fiddler发了一个http post请求:使用

http://localhost:58183/api/Account/Register

身体

{"email":"jbjunk4@outlook.com","password":"Abc1231*","confirmPassword":"Abc1231*"}

执行得很好,电子邮件在webapi 2上的身份数据库中注册。

但是,我在authorize.service.ts中有以下代码:

 registerUser(localUser: LocalUser) {
        var headers = new Headers();
        headers.append('Content-Type', this.constants.jsonContentType);
        var creds = JSON.stringify(localUser);
        console.log(creds);
        console.log(this.constants.accountUrl + "Register");

        return this.http.post(this.constants.accountUrl + "Register", creds, { headers: headers })
            .map(res => res.json());
    }

creds = 
{"email":"jbaird9@arsbirder.com","password":"Abc1231*","confirmPassword":"Abc1231*"}

url = http://localhost:58183/api/Account/Register
json-contentType = "application/json;charset=UTF-8";

控制台显示: SCRIPT7002:XMLHttpRequest:网络错误0x80070005,访问被拒绝。

家 HTML1300:导航发生。 家 模板解析警告: 该元素已弃用。改为使用(“-child ui-shadow”:!root}“class =”ui-menu-list“             (点击)= “listClick($事件)” >             [警告 - >]                 HTTP://本地主机:58183 / API /帐号/注册 authorization.service.ts(47,9) SCRIPT7002:XMLHttpRequest:网络错误0x80070005,访问被拒绝。

家 错误SyntaxError:无效字符 core.es5.js(1020,1)    “错误”    {       [功能]: ,        proto :{},       描述:“无效的角色”,       消息:“无效的字符”,       name:“SyntaxError”,       号码:-2146827274,       stack:“SyntaxError:无效字符    在匿名函数(http://localhost:4200/main.bundle.js:788:13)    在SafeSubscriber.prototype .__ tryOrUnsub(http://localhost:4200/vendor.bundle.js:37370:13)    在SafeSubscriber.prototype.error(http://localhost:4200/vendor.bundle.js:37329:21)    在Subscriber.prototype._error(http://localhost:4200/vendor.bundle.js:37260:9)    在Subscriber.prototype.error(http://localhost:4200/vendor.bundle.js:37234:13)    在Subscriber.prototype._error(http://localhost:4200/vendor.bundle.js:37260:9)    在Subscriber.prototype.error(http://localhost:4200/vendor.bundle.js:37234:13)    在onError(http://localhost:4200/vendor.bundle.js:108672:17)    在ZoneDelegate.prototype.invokeTask(http://localhost:4200/polyfills.bundle.js:2836:13)    at onInvokeTask(http://localhost:4200/vendor.bundle.js:90272:21)“    }

HTTP405:BAD METHOD - 不支持使用的HTTP谓词。 (XHR)选项 - http://localhost:58183/api/Account/Register

我无法弄清楚这一点。提前感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

如果您的应用中没有proxy.conf.json文件,允许在其他端口上访问服务器,则通常会发生这种情况。 Angular有一个功能可以阻止流量进入不同的端口,除非您强制使用。如果您还没有proxy.conf.json文件,则需要在app root

上执行此操作
  

proxy.conf.json

 {
    "/api": {
      "target": "http://localhost:serverPort",
      "secure": false
    }
  }
  

proxy.config.js

const PROXY_CONFIG = [
  {
    context: [
      "/api",
      "/auth",
      "/oauth"
    ],
    target: "http://localhost:8080",
    secure: false
  }
];

module.exports = PROXY_CONFIG;

并更新package.json

"scripts": {

    "ng": "ng",

    "start": "ng serve --proxy-config proxy.conf.json",

    "build": "ng build",

    "test": "ng test",

    "lint": "ng lint",

    "e2e": "ng e2e"

  },

这将允许/api之后的任何内容到达服务器

答案 1 :(得分:0)

我将cors属性添加到webapi配置...并且它开始工作... var cors = new EnableCorsAttribute(“”,“”,“GET,PUT,POST,PATCH,DELETE,OPTIONS”); config.EnableCors(CORS);

答案 2 :(得分:0)

如果您的应用中没有proxy.conf.json文件,以允许在不同端口上访问服务器,则通常会发生这种情况。 Angular有一个功能可以阻止流量进入不同的端口,除非您强制使用。如果您还没有proxy.conf.json文件,则需要在app root

上执行此操作