在Windows中安装OWIN服务不工作

本文关键字:服务 工作 OWIN 安装 Windows | 更新日期: 2023-09-27 18:14:27

我对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中我可以选择浏览)?

在Windows中安装OWIN服务不工作

无法解析路由。

在我看来,你试图使用属性路由。

确保在Startup类中配置了MapHttpAttributeRoutes:

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/");
}