WebAPI:我显然可以';不能启用CORS(?)
嗨,编码员朋友们 在这个问题之后,我想到我可能必须为我的前端启用CORS来访问我的后端web api 然而,即使我尝试了这些步骤,显然没有任何改变:当我尝试与邮递员联系时,我收到了预期的字符列表,但答案中没有CORS标题(允许来源等)。 至于前端,您可能会在链接的问题中看到angular甚至找不到API 以下是web.config的相关示例:WebAPI:我显然可以';不能启用CORS(?),cors,asp.net-web-api2,Cors,Asp.net Web Api2,嗨,编码员朋友们 在这个问题之后,我想到我可能必须为我的前端启用CORS来访问我的后端web api 然而,即使我尝试了这些步骤,显然没有任何改变:当我尝试与邮递员联系时,我收到了预期的字符列表,但答案中没有CORS标题(允许来源等)。 至于前端,您可能会在链接的问题中看到angular甚至找不到API 以下是web.config的相关示例: public static void Register(HttpConfiguration config) { // Web AP
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;
}
到我的webconfig文件,如原始帖子中所述,现在我在postman中看到了标题 当需要启用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);
每种情况都发生在
配置方法中。这是一个web api项目,没有startup.cs文件。然后将其添加到api运行前执行代码的一个文件中,应该可以工作。这样的文件是Global.asax
。此外,如果使用Microsoft Identity
进行身份验证,则WebApi
项目中有一个Startup.cs
文件。我不使用Microsoft身份验证,问题是我在WebApiConfig中执行了类似的步骤。我不明白为什么在webconfig中添加标题会奏效,而在其他地方添加标题是不够的:/
app.UseCors(CorsOptions.AllowAll);