Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 虽然控制器存在,但Web API未找到任何控制器_C#_Routing_Controller_Asp.net Web Api_Self Hosting - Fatal编程技术网

C# 虽然控制器存在,但Web API未找到任何控制器

C# 虽然控制器存在,但Web API未找到任何控制器,c#,routing,controller,asp.net-web-api,self-hosting,C#,Routing,Controller,Asp.net Web Api,Self Hosting,我用两个项目创建了一个解决方案:一个是带有自宿主Web API的类库(在的帮助下创建),第二个是使用TopShelf创建的windows服务。此解决方案的目的是使用Web API对服务进行状态报告 一切正常,但当我在目标解决方案中重新创建解决方案时,整个应用程序无法正常工作。Windows服务似乎正在工作,但当我键入localhost:8080/Test时,它会抛出一个错误(以xml的形式查看): 项目中有一个ReportController(继承自ApicController),它包含Self

我用两个项目创建了一个解决方案:一个是带有自宿主Web API的类库(在的帮助下创建),第二个是使用TopShelf创建的windows服务。此解决方案的目的是使用Web API对服务进行状态报告

一切正常,但当我在目标解决方案中重新创建解决方案时,整个应用程序无法正常工作。Windows服务似乎正在工作,但当我键入localhost:8080/Test时,它会抛出一个错误(以xml的形式查看):

项目中有一个ReportController(继承自ApicController),它包含SelfHost,但不知何故它是“可见的”。我做了一个猜测(我相信这是一个愚蠢的猜测),并将其转移到windows服务项目中,但它也不起作用

有人能告诉我我面临的问题是什么吗?如果控制器在一个简单的解决方案中存在,为什么它看不到控制器

编辑: 我的路由如下所示:

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


承认这一点很遗憾,但它不起作用的原因在于控制器类没有访问修饰符。将其公开修复了错误。

类和方法必须是公开的

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

我可以查看路由/web api配置吗?可以,请发布路由。并检查您的服务是否以管理员身份运行。我不确定,但可能需要在本地系统上保留一个url。请注意:该方法也需要公开。干得好!这并不丢人。我们都会犯错误,在某些情况下,看到别人的错误真的会很有帮助,也会节省很多时间。(没有发生在我身上,但可能!!)很遗憾错误消息没有被描述。很抱歉,当我还是Stack的新手时,我写过:-)@MauriceKlimek谢谢这帮我节省了几个小时。
defaultControllerName = "Report";
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}");