2014-11-17 1 views
2

Использование WebApi 2.2. В моем WebApiConfig.cs у меня есть:Не найдено маршрута с именем контроллера, которое соответствует запросу URI

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» работает, но я не могу получить вторые один работать, попробовав много различных вещей и чистящие этот сайт.

My Controller, как это:

[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> 

Я не понимаю, что я мог бы получать здесь не так. Попробовали вещи frommanydifferentanswers но не мудрее.

+0

Предполагая, что Utilities.MeasureDefinitions является перечислением, вы пытались изменить тип параметра на int, а затем вручную преобразовать в enum в теле? –

+0

Также вы можете попытаться сделать имена параметров метода эквивалентными именам параметров маршрутизатора? –

+0

Реализованы оба предложения и соответственно обновили мой вопрос. Тем не менее, при этом возвращается одна и та же ошибка. Я до сих пор довольно новичок в этом - есть ли где-нибудь, где я могу подключить отладчик, чтобы я мог попытаться следить за тем, что происходит, и, возможно, посмотреть, где он падает, знаете ли вы? –

ответ

4

После того, как вы все отпустили и попробовали случайные вещи, я в конце концов нашел решение (для меня в любом случае).

Изменение:

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

к:

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 
    } 
    ); 

Внезапно он работает. Что-то около {controller} в routeTemplate заставило его работать. Я не знаю, почему почему (и интересно, какое влияние это будет иметь, если у меня есть будущий маршрут с аналогичным стилем параметров).

+0

Я могу это подтвердить. Кто-нибудь знает? – Jason94

+0

Это сработало и для меня. У меня возникла проблема с режимом простого контроллера. Решение {Controller} в шаблоне маршрута и присвоение имени по умолчанию было решением. –

+0

, подтверждающий, что явное имя контроллера в шаблоне маршрута не работает в моем случае, но использование вместо этого {controller} действительно сработало. – Fjarskiptagervitungl

Смежные вопросы