【发布时间】:2019-06-03 20:38:43
【问题描述】:
我正在 c# .NET 框架 4.6.1 中创建 WebAPI。我取了一个空模板,添加了一个控制器:
public class InfoController : ApiController
{
public bool LaunchNotePad()
{
AppServices as = new AppServices();
bool result = as.LaunchNotePad();
return result;
}
}
我在同一个解决方案中有一个类库,它有一些方法如下:
public class AppServices
{
System.Diagnostics.Process.Start();
public bool LaunchApplication()
{
bool result = false;
Process.Start("notepad.exe", "SomeName");
return true;
}
}
在我的 WebApiConfig.cs 中:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
当我托管它并运行 URL http://IPAddress/api/Info/LaunchNotePad 时,我希望它实际上会在服务器中打开记事本并返回 true,但事实并非如此。相反,它显示了一些像这样的错误:
<Error>
<Message>
The requested resource does not support http method 'GET'.
</Message>
</Error>
简而言之,我想从 API 调用一个可以访问服务器上的 exe 文件的类库。在这个例子中,我展示了记事本作为示例,但实际上它是我们创建的一个 exe。所以每次我发送请求时,它都必须在托管它的服务器中打开记事本。
这可能吗?我错过了什么?
我添加了一张图片来展示我想要实现的目标:
【问题讨论】:
-
这个问题与打开EXE无关。它完全与路由和您的控制器方法有关。
-
@John ,我可能没有在问题中明确解释。但我想通过 Web API 打开记事本。有可能吗?
-
“我希望这实际上会在服务器中打开记事本并返回 true,但事实并非如此。相反,它显示了一些错误,如下所示:请求的资源不支持 http 方法'GET'。" - 表示路由存在问题,或者您需要
[HttpGet]属性。不管你的控制器方法做什么,事实是 ASP.NET 不知道如何将请求路由到你的控制器。因此,它与打开 EXE 无关。 -
如果您希望在您的 API 在服务器上运行时在客户端计算机上打开 exe,这是不可能的。
-
@ChetanRanpariya,不,我想在托管 API 的服务器上打开 exe
标签: c# asp.net-mvc asp.net-web-api class-library