64

我收到一个错误 - 在控制器“操作”上找不到与请求匹配的操作。

网址是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(),
               };
    }
}
4

2 回答 2

129

这是因为参数名称不匹配。从您的路线中,值1被分配给参数 namedid并且您的操作正在寻找参数 named moduleId

第一个选择是像这样改变你的路线:

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

其次是像这样更改您的网址:

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

所以参数名称匹配。

于 2013-01-23T14:50:01.450 回答
1

我的 api 有太多参数,我得到了一个错误。我用Route解决了这个问题。

[Route("addressverification/{id}/{no}/{day}/{month}/{year}")]
public AdressVerificationResult  Get(long? id, long? no ,long? day, long? month, long? year)
        {
        
        return new AdressVerificationResult  
            {
                Aciklama = "19........4 kimlik numaralı kişinin 18.......1 adres numarasında 'YerlesimYeri' adres tipi için geçerli bir yurtiçi adres beyanı mevcuttur.",
                DurumKod = true
            };


         }
        
于 2022-01-24T07:31:35.470 回答