我收到一个错误-在控制器"action"上找不到与请求匹配的操作.

url是http://localhost:37331/api/action/FindByModule/1.

我使用的路由是

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

控制器:

public class ActionController : ApiController
{
    private IActionRepository repository = null;

    [HttpGet]
    [ActionName("All")]
    public IEnumerable<JsonAction> All()
    {
        return from action in this.repository.Get()
               select new JsonAction
               {
                   ID = action.ID,
                   Text = action.Text.Trim(),
                   Description = action.Description.Trim(),
               };
    }

    [HttpGet]
    [ActionName("FindByModule")]
    public IEnumerable<JsonAction> FindByModule(Int64 moduleId)
    {
        return from action in this.repository.FindByModule(moduleId)
               select new JsonAction
               {
                   ID = action.ID,
                   Text = action.Text.Trim(),
                   Description = action.Description.Trim(),
               };
    }
}

推荐答案

这是因为参数名称不匹配.从您的路由中将值1赋给名为id的参数,并且您的操作将查找名为moduleId的参数.

第一个选项是更改您的路由,如下所示:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}/{moduleId}",
    defaults: new { moduleId = RouteParameter.Optional }
);

第二种方法是如下更改您的URL:

http://localhost:37331/api/action/FindByModule?moduleId=1

所以参数名匹配.

Asp.net相关问答推荐

如何正确配置 IHttpModule?

无法加载文件或程序集.无效指针(HRESULT 异常:0x80004003 (E_POINTER))

RNGCryptoServiceProvider - 随机数审核

如何从 dll 文件中提取类的源代码?

异步编程与线程有什么不同?

区分开发、登台和生产环境之间的 web.config

'Microsoft.ACE.OLEDB.12.0' 提供程序未在本地计算机上注册.

MVC 3视图中的当前上下文中不存在名称'HTML'

ASP.NET 中的多选下拉列表

如何在 asp net core api 中使用 Created(或 CreatedAtAction / CreatedAtRoute)

<%# Eval("State") %> 或 <%# DataBinder.Eval(Container.DataItem, "state")%>

如何将 LINQ 左外连接限制为一行

不同域的登录页面

System.Reflection.Assembly.LoadFile 锁定文件

远程计算机无法连接到 Visual Studio Web 服务器

路由模板分隔符/不能连续出现 - 属性路由问题

LinkBut​​ton 向 OnClick 后面的代码发送值

强制 IIS Express 进入classic 管道模式

RegisterStartupScript 不适用于 ScriptManager、Updatepanel.这是为什么?

ASP.NET MVC3 局部视图命名约定