【发布时间】:2019-08-11 15:55:45
【问题描述】:
我正试图让它在我的 ASP.Net Web API 2 应用程序中工作。你会注意到这个Controller继承了Controller。这是因为我需要返回一个视图而不是 JSON。
[RoutePrefix("api/Manage")]
public class ManageController : Controller
{
[Route("TestOne")]
public async Task<ActionResult> MyTestOne(string value1, string value2)
{
return View("");
{
}
这是我遇到的错误。
<error>
<MessageDetail> No type was found that matches the controller named 'Manage'.</MessageDetail>
</Error>
我需要像这样调用管理控制器。
https://api.domain.com/api/Manage/TestOne?value1=foo&value2=bar
我的 RouteConfig 是这样配置的。
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
注意:[RoutePrefix("api/Account")] 在我的 AccountController 中工作。这是一个 API 控制器并继承 ApiBase。
非常感谢任何帮助!谢谢!
【问题讨论】:
-
你可以只添加 [RoutePrefix("api/[controller]")] 让 RouteConfig 做他自己的工作。
-
您能否详细解释一下为什么需要返回 View 以及如何调用此 Api 操作。听起来很奇怪。
-
属性路由会覆盖传统路由,所以不知道为什么这里提供RouteConfig
-
@pmcilreavy 我从电子邮件中的 URL 调用它。我需要返回一个带有可以阅读的消息的视图,而不是返回 Ok("Success")。然后需要通过 JavaScript 关闭视图。
-
尝试在每个字符串参数前添加
[FromQuery],即MyTestOne([FromQuery] string value1, [FromQuery] string value2)。这将提示 asp.net 从查询字符串中获取这些值。
标签: c# asp.net-mvc routes asp.net-web-api2 attributerouting