C# 使用RESTfulWebAPI的angularjs2中的问题

C# 使用RESTfulWebAPI的angularjs2中的问题,c#,angular,asp.net-web-api,asp.net-web-api2,C#,Angular,Asp.net Web Api,Asp.net Web Api2,我正在使用RESTfulWebAPI执行AngularJS2,在调用HTTPPOST时遇到一些控制台错误。错误如下所示: 希望你能帮忙 控制器代码段 namespace SoomWebApi.Controllers { [EnableCors(origins: "http://localhost:64336", headers: "*", methods: "*")] public class UserController : ApiController {

我正在使用RESTfulWebAPI执行AngularJS2,在调用HTTPPOST时遇到一些控制台错误。错误如下所示:

希望你能帮忙

控制器代码段

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());

        } 
    }
}
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 }
        );
    }
}
Webapiconfig代码段

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());

        } 
    }
}
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 }
        );
    }
}

这看起来像是CORS的问题。。尝试将Startup.cs文件放入WebAPI中,如下所示:

 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)
                }
            });
如果要限制到某个特定主机,请尝试以下操作:

 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)
                }
            });

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

Access-Control-Allow-Origin: "domains"

如果您仅在调试时遇到此问题,并且不打算在部署后使用CORS-大部分本地web服务器在本地主机上启动Angular应用程序:一些端口和部署在本地主机上的服务器-使用IE进行调试-即使您的Angular中间件和后端在不同端口上工作,它也能正常工作

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


Allow all适用于开发环境,但在生产模式下进行适当的配置。创建了Startup.cs InsideAppu Start文件夹,并包含了您的代码。但找不到任何像UseCorsy这样的扩展您不必创建它。。。webapi asp.net脚手架为您完成此任务(应用程序内的int_start..但在根路径中)。。您需要安装Nuget软件包..尝试键入Nuget UI…owin CORS如果您没有将其放入正确的文件中,请以正确的方式引用,这将帮助您解决第一个错误。。