Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带正文的angularjs资源帖子_C#_Angularjs_Asp.net Web Api2 - Fatal编程技术网

C# 带正文的angularjs资源帖子

C# 带正文的angularjs资源帖子,c#,angularjs,asp.net-web-api2,C#,Angularjs,Asp.net Web Api2,我是angularjs的新手,我正在尝试使用带有body to exist api的资源发布文章 当我在邮递员身上发送邮件时,它可以正常工作,登录并取回令牌 api运行良好 我怎样才能在angularjs上做到这一点 这是我的密码 这是api [Route("v1/token")] [HttpPost] public IHttpActionResult Post(LoginViewModel viewModel) {} 我的资源工厂 app.fa

我是angularjs的新手,我正在尝试使用带有body to exist api的资源发布文章 当我在邮递员身上发送邮件时,它可以正常工作,登录并取回令牌

api运行良好 我怎样才能在angularjs上做到这一点

这是我的密码 这是api

[Route("v1/token")]
        [HttpPost]
        public IHttpActionResult Post(LoginViewModel viewModel)
        {}
我的资源工厂

app.factory('getToken', function ($resource, $q) {

        return function (email, password) {
            console.log(email);
            console.log(password);
            return $resource('http://localhost:9303/v1/token', {}, {
                login: {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/jsonp;'
                    },
                    body: {
                        Email: email,
                        Password: password
                    }
                }
            });

        }
    });
这是我的登录功能

loginService.login = function (username, password) {

        var deferred = $q.defer();

        if (username === 'erez' && password === 'pass') {
            var src = getToken('email','password').login(function (result) {
                console.log(result);
            });
            console.log(src);
            deferred.resolve(src);
        }
        else {
            deferred.reject({ message: 'Unauthorized user' });
        }

        return deferred.promise;

    }
我知道那个错误

POST http://localhost:9303/v1/token (anonymous function) @ angular.js:11442r @ angular.js:11235g @ angular.js:10945(anonymous function) @ angular.js:15552m.$eval @ angular.js:16820m.$digest @ angular.js:16636m.$apply @ angular.js:16928(anonymous function) @ angular.js:24551n.event.dispatch @ jquery-2.2.0.min.js:3r.handle @ jquery-2.2.0.min.js:3
(index):1 XMLHttpRequest cannot load http://localhost:9303/v1/token. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:53647' is therefore not allowed access. The response had HTTP status code 500.
当我对api进行debig时,当我到达api时,viewModel为null 为什么它是空的 他不了解我的身体

我试着用params替换body,但都是一样的


感谢您的帮助

您正在请求从一个域到另一个域,例如从www.xyz.com到www.abc.com。在您的情况下,您正在从源“localhost:53647”请求“localhost:9303/v1/token”


出于调试目的,您可以使用Allow Control Allow Origin plugin For google chrome和其他浏览器,否则您需要配置并允许localhost:9303/接受来自其他域的请求。

您正在请求从一个域到另一个域,例如从www.xyz.com到www.abc.com。在您的情况下,您正在从源“localhost:53647”请求“localhost:9303/v1/token”


出于调试目的,您可以使用Allow Control Allow Origin plugin For google chrome和其他浏览器,否则您需要配置并允许localhost:9303/接受来自其他域的请求。

好的,我想分享我对这个问题的解决方案 经过大量研究,我发现当你试图发布到WebAPI时,你必须在同一个域中,这是典型的跨域问题

首先,您需要在PackageMenage控制台上安装

Install-Package Microsoft.AspNet.WebApi.Cors
如果您的web.config中有,则应删除该选项

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE" />
  </customHeaders>
</httpProtocol
并且需要将这一行添加到web api上的post方法中

[EnableCors(origins: "*", headers: "*", methods: "*")]
希望它能帮助别人
关于

我想分享一下我对这个问题的解决方案 经过大量研究,我发现当你试图发布到WebAPI时,你必须在同一个域中,这是典型的跨域问题

首先,您需要在PackageMenage控制台上安装

Install-Package Microsoft.AspNet.WebApi.Cors
如果您的web.config中有,则应删除该选项

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, OPTIONS, PUT, DELETE" />
  </customHeaders>
</httpProtocol
并且需要将这一行添加到web api上的post方法中

[EnableCors(origins: "*", headers: "*", methods: "*")]
希望它能帮助别人
关于

嗯,您的问题是“不存在“访问控制允许原点”标题…”。是您的服务器拒绝了请求,因为它来自不知道的位置。所需要的是对服务器进行修改,以允许来自其他来源的请求。你应该读一些关于它的书,看看它是如何与具有相同标题的postman一起工作的?Chrome打包的应用程序可以具有跨域权限。当您安装Postman时,它会提示您此应用程序将访问任何域。您的问题是“不存在“访问控制允许来源”标题…”。是您的服务器拒绝了请求,因为它来自不知道的位置。所需要的是对服务器进行修改,以允许来自其他来源的请求。你应该读一些关于它的书,看看它是如何与具有相同标题的postman一起工作的?Chrome打包的应用程序可以具有跨域权限。当您安装Postman时,它会提示您此应用程序将访问任何域。但是,当我调试post api时,它会捕获post req,但viewmodel为空。您需要调用登录函数,以便将viewmodel发送到您的api。请在代码中进行以下更改,您就可以……)返回函数(){return$resource(“”,{},{login:{method:'POST',headers:{'Content Type':'application/jsonp;'}}});//并更改调用此服务的位置var src=getToken.login({Model Body here})。$promise()。然后(函数(结果){console.log(结果);});但是,当我调试post api时,它会捕获post req,但viewmodel为空。您需要调用login函数,以便将viewmodel发送到您的api。请在代码中进行以下更改,您就可以…:)返回函数(){return$resource(“”,{},{login:{method:'POST',headers:{'Content Type':'application/jsonp;'}}}}});//并更改调用此服务的位置var src=getToken.login({Model Body here})。$promise().then(函数(结果){console.log(result);});