尽管存在控制器,Web API也找不到控制器

时间:2013-04-10 14:33:54

标签: c# routing controller asp.net-web-api self-hosting

我创建了一个包含两个项目的解决方案:一个是带有Self Host Web API的类库(在http://www.asp.net/web-api/overview/hosting-aspnet-web-api/self-host-a-web-api的帮助下创建),第二个是使用TopShelf创建的Windows服务。此解决方案的目的是使用Web API获取服务的状态报告。

一切正常,但是当我在目标解决方案中重新创建我的解决方案时,整个应用程序都无法正常工作。 Windows服务似乎正在工作,但是当我输入localhost:8080 / Test时,假设查看OK(并且它在开头提到的单独的测试解决方案中)它会抛出一个错误(被视为xml):

Message: No HTTP resource was found that matches the request URI 'http://localhost:8080/Test'.
MessageDetail: No type was found that matches the controller named 'Report'.

项目中有一个ReportController(继承自ApiController),其中包含SelfHost但不知何故它是“可见的”。我猜了(我相信这是一个愚蠢的猜测)并将其移至Windows服务项目,但它也无效。

有人能告诉我我面临的问题是什么吗?为什么在简单的解决方案中没有看到控制器?

修改 我的路由如下:

var config = new HttpSelfHostConfiguration(String.Format("http://localhost:{0}", port));
config.Routes.MapHttpRoute("API Default", "{action}", new { controller = defaultControllerName });

,其中

defaultControllerName = "Report";

2 个答案:

答案 0 :(得分:7)

承认它是一种耻辱,但它没有工作的原因在于没有访问修饰符的控制器类。公开修复错误。

答案 1 :(得分:1)

类和方法必须是公共的

public class PrintController: ApiController
{
    //[HttpGet, Route("api/Print/Getp")]
    public string Get()
    {
 
        var ob = new List<string>();
        foreach (var item in File.ReadLines(@"c:\PrintService\pr.txt"))
        {
            string i = item;
            ob.Add(i);
        }
        var json1 = JsonConvert.SerializeObject(ob);


        return "ok";
    }
}

我的路线配置是这样的:

            _config.Routes.MapHttpRoute("DefaultHttpRoute", "api/{controller}");