我正在使用Microsoft.AspNet.WebApi V5.2.3,Microsoft.Owin.Host.HttpListener 3.0.1。从以下配置开始:
public void Configuration(IAppBuilder appBuilder)
{
HttpConfiguration config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
appBuilder.UseWebApi(config);
}
API Controller类使用:
声明[EnableCors("*", "*", "*")]
public class CWebAPIController : ApiController
{
[Route("API/System/Login"), HttpGet]
public IHttpActionResult Login(string UserID, string Password)
{
.... bla bla bla .....
}
}
我可以在同一台计算机上使用HttpClent调用上面的API,但是如果我尝试从另一台计算机(在同一子网内)调用API,我得到400 BadRequest响应。
我相信这是CORS问题,但我可以知道如何解决这个问题。在谷歌搜索会产生很多结果,并且有很多版本/实现的WebApi,我不知道在尝试了一整天之后哪一个是正确的。
提前致谢
答案 0 :(得分:1)
我添加了这样的角色:
public void Configuration(IAppBuilder app)
{
var config = ConfigureApi();
app.UseWebApi(config);
}
private HttpConfiguration ConfigureApi()
{
var config = new HttpConfiguration();
config.Routes.MapHttpRoute(
"DefaultApi",
"{controller}/{action}/{id}",
new { id = RouteParameter.Optional });
config.MessageHandlers.Add(new CorsMessageHandler ());
return config;
}
CorsMessageHandler在这里: https://github.com/Microsoft/FetchClimate/blob/master/src/Service/Frontend/CORS/CorsMessageHandler.cs
希望它能奏效。
答案 1 :(得分:0)
您需要将Microsoft.Owin.Cors包以及Microsoft.AspNet.Cors包引入您的项目并在open
类中初始化CORS,如下所示:
Startup
答案 2 :(得分:0)
EnableCors属性应该适用于您的API控制器。或者,您可以执行以下操作之一。
如果您想允许从任何计算机访问,则可以使用
appBuilder.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
否则,如果您想控制允许哪个域/计算机使用
var cors = new EnableCorsAttribute("www.example.com", "*", "*");
config.EnableCors(cors);
您需要安装Microsoft.Owin.Cors包。
答案 3 :(得分:0)
对于自托管,我们需要在管理员模式下运行以下命令。
netsh http add urlacl url=http://+:<port>/ user=<user id>