没有找到提供控制器名称的路由来匹配请求URI

Mik*_*use 4 c# asp.net-web-api2

使用WebApi 2.2.在我的WebApiConfig.cs中,我有:

public static void Register(HttpConfiguration configuration)
{
    configuration.Routes.MapHttpRoute("API Default", "api/{controller}/{id}",
       new { id = RouteParameter.Optional });

    configuration.Routes.MapHttpRoute(
       name: "EnvironmentCreateAnnualTargetApi",
       routeTemplate: "api/EnvironmentTargets/{WorkLocationGuid}/{UserGuid}/{Year}"
    );

    configuration.Routes.MapHttpRoute(
       name: "EnvironmentUnitConversionApi",
       routeTemplate: "api/Conversions/{ConvertFromMeasureId}/{ConvertFromAmount}/{ConvertToMeasureId}/{MeasureDefinition}",
       defaults: new
       {
           ConvertFromMeasureId = RouteParameter.Optional,
           ConvertFromAmount = RouteParameter.Optional,
           ConvertToMeasureId = RouteParameter.Optional,
           MeasureDefinition = RouteParameter.Optional
        }
     );
}
Run Code Online (Sandbox Code Playgroud)

名为"EnvironmentCreateAnnualTargetApi"的路线正在运行,但是我尝试了很多不同的东西并搜索了这个网站,我无法让第二个工作.

我的控制器是这样的:

[RoutePrefix("api/Conversions")]
public class ConversionsController : ApiController
{
Run Code Online (Sandbox Code Playgroud)

然后到方法:

// GET: api/Conversions/7/5000/10/1
    [HttpGet, ActionName("Get")]
    [AllowAnonymous]
    public double Get(int ConvertFromMeasureId, double ConvertFromAmount, int ConvertToMeasureId, int MeasureDefinition)
Run Code Online (Sandbox Code Playgroud)

我已经尝试过使用和不使用MapHttpRoute方法中设置的默认值.

我一直得到的错误是:

<Error>
<Message>No HTTP resource was found that matches the 
request URI 'http://localhost:50000/api/Conversions/7/10000/10/1'.</Message>
<MessageDetail>No route providing a controller name was 
found to match request URI 
'http://localhost:50000/api/Conversions/7/10000/10/1'</MessageDetail>
</Error>
Run Code Online (Sandbox Code Playgroud)

我不明白我在这里可能会出错. 许多 不同的 答案尝试过的东西,但没有更聪明.

Mik*_*use 5

在剥离了所有东西并尝试随机的东西后,我最终找到了解决方案(无论如何对我而言).

更改:

configuration.Routes.MapHttpRoute(
       name: "EnvironmentUnitConversionApi",
       routeTemplate: "api/Conversions/{ConvertFromMeasureId}/{ConvertFromAmount}/{ConvertToMeasureId}/{MeasureDefinition}",
       defaults: [blah]
Run Code Online (Sandbox Code Playgroud)

至:

configuration.Routes.MapHttpRoute(
    name: "EnvironmentConversions",
    routeTemplate: "api/{Controller}/{ConvertFromMeasureId}/{ConvertFromAmount}/{ConvertToMeasureId}/{MeasureDefinition}",
    defaults: new
    {
       Controller = "Conversions",
       ConvertFromMeasureId = RouteParameter.Optional,
       ConvertFromAmount = RouteParameter.Optional,
       ConvertToMeasureId = RouteParameter.Optional,
       MeasureDefinition = RouteParameter.Optional
    }
    );
Run Code Online (Sandbox Code Playgroud)

突然它起作用了.{controller}routeTemplate中的一些东西使它工作.然而我不知道为什么(并且想知道如果我有一个类似参数风格的未来路线会有什么影响).