【发布时间】:2015-01-14 09:19:37
【问题描述】:
使用 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>
【问题讨论】:
-
假设Utilities.MeasureDefinitions是一个枚举,你有没有试过把参数类型改成int,然后在body中手动转换成枚举?
-
您也可以尝试使方法参数名称等同于路由器参数名称吗?
-
实施了这两个建议并相应地更新了我上面的问题。但是,仍然返回相同的错误。我对此还是很陌生 - 有没有可以附加调试器的地方,这样我就可以尝试跟踪正在发生的事情,也许看看它在哪里崩溃,你知道吗?
-
这似乎是一个类似的问题stackoverflow.com/questions/19914237/…
-
您能否按照链接中的建议注释掉您的其他路线,看看是否可行?
标签: c# asp.net-web-api2