angularjs2中的问题与restful web API

时间:2016-12-30 09:19:42

标签: c# angular asp.net-web-api asp.net-web-api2

我正在使用Restful Web API进行AngularJS2,并在调用HTTP post时遇到一些控制台错误。错误列在下面,

enter image description here 希望你能帮忙

控制器代码段

namespace SoomWebApi.Controllers
{
    [EnableCors(origins: "http://localhost:64336", headers: "*", methods: "*")]
    public class UserController : ApiController
    {

        public HttpResponseMessage UserLogin([FromBody] LoginRequestData objValidate)
        {
            UserModelManager _UserModelManagerr = new Models.UserModelManager();

            return Request.CreateResponse(HttpStatusCode.OK, _UserModelManagerr.Login(objValidate), GetJSONFormatter());

        } 
    }
}

Webapiconfig代码段

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        config.EnableCors();

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

3 个答案:

答案 0 :(得分:0)

它看起来像一个CORS问题..尝试在WebAPI中放入你的Startup.cs文件:

 using Microsoft.Owin;
using Owin;

 public void Configuration(IAppBuilder app)
        {
            app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
            ConfigureAuth(app);

        }

如果你想限制某些特定的主机..例如:

  var corspolicy = new corspolicy
            {
                allowanymethod = true,
                allowanyheader = true,
                supportscredentials = true,
                origins = { "http://www.example.com", "http://localhost:38091", "http://localhost:39372" }

            };

            app.usecors(new corsoptions
            {
                policyprovider = new corspolicyprovider
                {
                    policyresolver = context => task.fromresult(corspolicy)
                }
            });

答案 1 :(得分:0)

您的服务器应支持CORS以允许来自不同域的访问。更新您的服务器配置以仅允许预定义的域集允许访问。

Access-Control-Allow-Origin: "domains"

如果你在调试时遇到这个问题并且没有计划在部署后使用CORS - 大多数本地web服务器在 localhost:some-port 上启动你的Angular应用程序,并且也在localhost上部署服务器 - 使用IE用于调试 - 即使您的角度中间件和后端在不同的端口上工作,它也能正常工作。

答案 2 :(得分:0)

如果生产中的代码与REST API位于同一个域中,则可以安装chrome扩展以避免CORS错误:

Chrome CORS extension