0

У меня есть следующий код в моем мы апи:Почему моя маршрутизация веб-API не работает?

public static void Register(HttpConfiguration config) 
    { 


     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     //Set default content to json 
     var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml"); 
     config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType); 

     config.Routes.MapHttpRoute(
       name: "DefaultApi2", 
       routeTemplate: "api/{controller}/{action}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
     ); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

Вот conreoller и actionmethod Я пытаюсь подключиться к:

[Authorize] 
public class DeviceConnectionController : ApiController 
{   
    [HttpGet] 
    public string Status(int deviceId) 
    { 
     string stats = "1234:"; 
     stats += FSK_APNLink.ConnectionStatus.Connected.ToString(); 
     return stats; 
    } 
} 

Теперь следующий запрос прибудете дает мне 404:

http://localhost:50000/api/deviceconnection/status/45 

однако если удалить параметр из метода действия выполняет следующее правильно:

http://localhost:50000/api/deviceconnection/status 
+2

Измените параметр в действии контроллера как id, а не на deviceId – eiximenis

+0

Вы уверены, что он выполняет «правильно»? Не-nullable int получает значение 'null', потому что он является необязательным и не установлен? –

ответ

2

Существует необязательный параметр, называемый идентификатором, который сопоставляется маршрутом со списком параметров метода. Единственный параметр метода называется deviceId, поэтому он не будет иметь никакого значения. Вам нужно либо переименовать параметр в сигнатуре метода, либо в шаблоне маршрута.

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