难倒自托管Web Api服务

时间:2013-01-11 20:31:15

标签: c# asp.net .net asp.net-mvc-4 asp.net-web-api

请帮助,我正在尝试自我托管网络API。

当同一个控制器托管在一个Web项目上,并通过F5在dev上运行时,一切运行良好。

然而现在我正试图自我托管相同,我得到411和404. 411,当我使用Fiddler连接时,404当我尝试通过另一个库连接时。

这是应该托管服务的控制台应用程序:

class Program
{        
    static int portNumber;



    static void Main(string[] args)
    {
        portNumber = 8089;

        var config = new HttpSelfHostConfiguration(
            string.Format("http://localhost:{0}", portNumber));

        config.Routes.MapHttpRoute(
                "API Default", "api/{controller}/{id}",
                new { id = RouteParameter.Optional });

        using (var server = new HttpSelfHostServer(config))
        {

            var test = new RetrieveGuidService().Execute(Unit.Instance);

            server.OpenAsync().Wait();

            Console.ReadLine();
        }
    }
}

这就是我的控制器的样子,它没有做任何事情只是一个测试。

public class RetrieveGuidServiceController : ApiController
{
    public virtual Guid PostExecute(Unit request)
    {
        IQueryService<Unit,Guid> queryService = new RetrieveGuidService();
        return queryService.Execute(request);
    }
}

以下是我试图通过fiddler访问它的方式:

My Fiddler Pic

当服务托管在Web项目上时,同样有效。我几乎遵循了这个教程:asp.net WebApi self host tutorial,其中包括运行nugget脚本,添加依赖项等等。

我还缺少什么?

2 个答案:

答案 0 :(得分:2)

411是因为你没有放入Content-Length标题。即使您没有发送内容,也需要包含Content-Length:0。

关于让控制器处于正确的程序集中,我的行为不一致。在某些项目中,它似乎在其他项目中不起作用。不确定我做错了什么。我有一个项目here同时使用不同程序集中的所有控制器同时执行Web主机和自主机,并且它可以正常工作。

答案 1 :(得分:1)

默认情况下,服务似乎不会在托管服务的程序集之外的程序集中查找控制器。

我认为这是一个遗漏,除非我正在阅读规范。