WebAPI OWIN SelfHosting CORS支持

时间:2016-08-26 12:12:18

标签: asp.net-web-api cors owin self-hosting

我正在使用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,我不知道在尝试了一整天之后哪一个是正确的。

提前致谢

4 个答案:

答案 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>