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)
在剥离了所有东西并尝试随机的东西后,我最终找到了解决方案(无论如何对我而言).
更改:
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中的一些东西使它工作.然而我不知道为什么(并且想知道如果我有一个类似参数风格的未来路线会有什么影响).