在Windows中安装OWIN服务不起作用

时间:2015-09-24 13:18:47

标签: c# routing owin

作为一种技术,我对OWIN很陌生。我有一个服务,我的路由看起来像这样:

[Route("myMessage/{message}")]
[AcceptVerbs("GET", "POST")]
[HttpPost]
public void myMessage(string message)

我安装了这样的服务:

installutil My.Service.exe

并检查该服务是否在Windows(8)下运行。

但是,当我尝试导航到此URI http://localhost:1010/myMessage/test

我收到404错误。有没有办法调试或查看这是否正确运行(例如,在IIS中我可以选择浏览)?

1 个答案:

答案 0 :(得分:0)

您的路线无法解决。

在我看来,您正在尝试使用attribute routing

确保您在MapHttpAttributeRoutes课程中配置Startup

class Startup
{
    public void Configuration(IAppBuilder appBuilder)
    {
        // Configure Web API for self-host. 
        HttpConfiguration config = new HttpConfiguration();

        config.MapHttpAttributeRoutes();

        //config.Routes.MapHttpRoute(
        //    name: "DefaultApi",
        //    routeTemplate: "api/{controller}/{id}",
        //    defaults: new { id = RouteParameter.Optional }
        //);

        appBuilder.UseWebApi(config);
    } 
}

正如您所看到的,我已禁用标准路由系统(config.Routes.MapHttpRoute),因为我更喜欢定义自己的路由。

现在,您的api控制器必须具有一个属性,您可以使用RoutePrefix为路线配置前缀。

通常你会使用一些api/controller命名:

[RoutePrefix("api/messages")]

您的控制器应如下所示:

[RoutePrefix("api/messages")]
public class MessagesController : ApiController
{
    [Route("myMessage/{message}")]
    [AcceptVerbs("GET", "POST")]
    [HttpPost]
    public string myMessage(string message)
    {
        return message;
    }
}

您的控制器名称甚至可能完全不同:

public class FooController : ApiController
{

}

因为现在重要的是RoutePrefix

您的控制器现在应该能够接受以下请求:

localhost:<port>/api/messages/myMessage/<yourmessage>

不要忘记在ServiceBase中定义正确的端口:

protected override void OnStart(string[] args)
{
    myServer = WebApp.Start<Startup>(url: "http://localhost:1010/");
}