C# 未找到与请求URI匹配的提供控制器名称的路由

C# 未找到与请求URI匹配的提供控制器名称的路由,c#,asp.net-web-api2,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.

使用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
        }
     );
}
名为“EnvironmentCreateAnnualTargetApi”的路由正在运行,但我无法使用第二个路由,因为我尝试了许多不同的方法并搜索了这个站点

我的控制器是这样的:

[RoutePrefix("api/Conversions")]
public class ConversionsController : ApiController
{
然后对该方法:

// GET: api/Conversions/7/5000/10/1
    [HttpGet, ActionName("Get")]
    [AllowAnonymous]
    public double Get(int ConvertFromMeasureId, double ConvertFromAmount, int ConvertToMeasureId, int MeasureDefinition)
我已经尝试过使用和不使用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>

找不到与匹配的HTTP资源
请求URI'http://localhost:50000/api/Conversions/7/10000/10/1'.
未找到提供控制器名称的路由
找到与请求URI匹配的
'http://localhost:50000/api/Conversions/7/10000/10/1'

我不明白我在这里可能出了什么错。我尝试过一些东西,但没有一个更明智。

在把所有东西都剥离出来,然后随机尝试一些东西之后,我最终找到了解决办法(不管怎样,对我来说)

更改:

configuration.Routes.MapHttpRoute(
       name: "EnvironmentUnitConversionApi",
       routeTemplate: "api/Conversions/{ConvertFromMeasureId}/{ConvertFromAmount}/{ConvertToMeasureId}/{MeasureDefinition}",
       defaults: [blah]
致:


突然,它起作用了。routeTemplate中关于
{controller}
的某些内容使它工作起来。但是,我不知道为什么(我想知道如果我有一条具有类似参数样式的未来路线,这将产生什么影响)。

假设Utilities.MeasureDefinitions是一个枚举,您是否尝试过将参数类型更改为int,然后在正文中手动转换为enum?您还可以尝试使方法参数名称等效于路由器参数名称吗?实现了这两个建议,并相应地更新了我上面的问题。但是,仍然返回相同的错误。我对这一点还是相当陌生的-是否有地方我可以附加一个调试器,这样我就可以尝试跟踪正在发生的事情,也许可以看到它在哪里发生了,你知道吗?这似乎是一个类似的问题。你能评论一下你在链接中建议的其他路线,看看它是否有效吗?我可以确认这一点。有人知道吗?这对我也有用。我在指向一个简单的控制器时遇到了问题。在我的路由模板中添加{Controller}并在默认值上指定名称是解决方案。在我的情况下,在路由模板中使用显式控制器名称不起作用,但使用{Controller}确实起作用。
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
    }
    );