我有一个使用AngularJS构建的客户端应用程序,它使用RESTful ASP.NET Web API中的服务。到现在为止还挺好。我在Visual Studio上使用相同的解决方案创建了它们,API是一个ASP.NET项目,AngularJS是一个网站。两个项目都必须使用Windows授权,所以我创建了API,将windows授权作为项目创建者向导中的默认AA机制,对于AngularJS,我在项目的属性选项卡上启用了Windows身份验证。
为了测试两个应用程序之间的通信,我决定构建一个简单的服务。我创建了一个Quotation模型类,为它构建了控制器,然后添加了迁移并在数据库中添加了一些引用。然后我尝试从angular应用程序发送一个get请求,只是为了收到这个错误:
在研究了这个问题后,我意识到我必须在Web API上启用CORS。所以我去了NuGet Package Manager并将Microsoft.AspNet.Cors包添加到项目中。
然后我在WebApiConfig.cs上启用了CORS,如下所示:
namespace Web_API
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.EnableCors();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
我将标题添加到我的控制器类和方法中(以防万一在类上是不够的):
namespace Web_API.Controllers
{
[EnableCors("*", "*","*")]
public class QuotationsController : ApiController
{
private Web_APIContext db = new Web_APIContext();
// GET: api/Quotations
[EnableCors("*", "*", "*")]
public IQueryable<Quotation> GetQuotations()
{
return db.Quotations;
}
但是,当我从AngularJS应用程序发出get请求时,仍然会出现相同的错误。有谁知道如何解决这个问题?
答案 0 :(得分:1)
[EnableCors(origins: "*", headers: "*", methods: "*")]
也不要在您的方法中使用EnableCors。正如您在控制器上使用它一样,默认情况下所有方法都属于此规则。
我希望这能解决你的问题。感谢。