Ahoy Coder朋友。
在这个问题Angular 2 + web api之后,我想到了我可能必须为我的前端启用CORS才能到达我的后端网络API。
但是,即使我尝试了这些步骤http://www.infragistics.com/community/blogs/dhananjay_kumar/archive/2015/08/31/how-to-enable-cors-in-the-asp-net-web-api.aspx以及这些https://enable-cors.org/server_aspnet.html,显然没有任何改变:当我尝试使用邮递员到达http://localhost:58825/api/character时,我会收到预期的字符列表,但答案中没有CORS标题(allow-origin等)。 至于前端,您可能会在链接的问题中看到角度甚至找不到API。
以下是web.config的相关示例:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
var cors = new EnableCorsAttribute("http://localhost:3000", "*", "*");
config.EnableCors(cors);
和控制器一样:
public class CharacterController : ApiController
{
private readonly CharacterRepository repo = new CharacterRepository();
JavaScriptSerializer jsonConverter = new JavaScriptSerializer();
[EnableCors(origins:"http://localhost:3000", headers:"*", methods:"*")]
// GET: api/Character
public IEnumerable<string> GetAll()
{
List<Character> myCharacs = repo.Get().ToList();
List<String> myJsonCharacs = new List<string>();
foreach (var charac in myCharacs)
{
var cur = jsonConverter.Serialize(charac);
myJsonCharacs.Add(cur);
}
return myJsonCharacs;
//return myCharacs;
}
显然,我添加了nuget包Microsoft.AspNet.WebApi.Cors(5.2.2)。
我尝试清理解决方案,重建,重新启动VS ......我已经看过&#34;类似问题&#34;在这里询问,但我甚至没有#34;没有标题&#34;例外,我的请求似乎没有给出关于CORS的f * ck。
我的前端应用程序位于localhost:3000,我的api位于localhost:58225(我通过visual studio启动它,如果这改变了什么)
有谁知道我惨遭失败的是什么? (除了生活,这不是问题,我已经习惯了)
编辑:可能加倍Asp.Net WebApi2 Enable CORS not working with AspNet.WebApi.Cors 5.2.3
重新编辑:我不知道这是不是真的倍增,但我设法通过添加来解决我的问题
add name="ExtensionlessUrlHandler-Integrated-4.0" path="*."
verb="GET,HEAD,POST,PUT,DELETE"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" /
到我的webconfig文件,如原帖中所述,现在我看到postman中的标题。
答案 0 :(得分:1)
当您需要启用CORS时,您可以转到Startup.cs
文件并添加:
using Microsoft.Owin.Cors;
一开始。那你有两个选择:
您指定了来源:
var corsPolicy = new CorsPolicy { AllowAnyHeader = true, AllowAnyMethod = true };
corsPolicy.Origins.Add("your origin");
var corsOptions = new CorsOptions
{
PolicyProvider = new CorsPolicyProvider
{
PolicyResolver = context => Task.FromResult(corsPolicy)
}
};
您允许所有这些:
app.UseCors(CorsOptions.AllowAll);
每个都发生在Configuration
方法中。