2016-10-09 6 views
1

Вот мой Global.asmxWeb API 2 Пользовательский контроллер. Маршрутизация вопрос

public class WebApiApplication : System.Web.HttpApplication 
{ 
    protected void Application_Start() 
    { 
     GlobalConfiguration.Configure(WebApiConfig.Register);    
    } 
} 

Вот мой класс WebApiConfig.

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Web API configuration and services 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

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

Вот мой ApiController

public class HelloController : ApiController 
{ 
    public string Get() 
    { 
     return "get method"; 
    } 

    [Route("SayHello")] 
    public string SayHello() 
    { 
     return "Hello Jim"; 
    } 
} 

Если я просматриваю к http://localhost:52072/api/hello/get то я буду получать обратно "получить метод", как и ожидалось.

Если я просматриваю http://localhost:52072/api/hello/SayHello, то это ошибки с 404 not found.

Любые идеи?

ответ

0

Источник: Attribute Routing in ASP.NET Web API 2

маршрут Обновления

public class PaymentController : ApiController { 
    public string Get() { 
     return "get method"; 
    } 

    //GET api/payment/SayHello 
    [HttpGet]  
    [Route("api/payment/SayHello")] 
    public string SayHello() { 
     return "Hello Jim"; 
    } 
} 

Вы также можете использовать префикс маршрута

[RoutePrefix("api/payment")] 
public class PaymentController : ApiController { 
    //GET api/payment/Get 
    [HttpGet] 
    [Route("Get")] 
    public string Get() { 
     return "get method"; 
    } 
    //GET api/payment/Sayhello 
    [HttpGet] 
    [Route("SayHello")] 
    public string SayHello() { 
     return "Hello Jim"; 
    } 
} 
+0

No. Теперь я получаю Error 405 Method Not Allowed. – CathalMF

+0

Ваш префикс маршрута работает. Другой не по какой-то причине. Благодарю. – CathalMF

+0

My bad the tilde (~) - это переопределение префикса маршрута, использующего обычный маршрут в той ситуации, когда вы смешиваете стандартную маршрутизацию и маршрутизацию атрибутов. – Nkosi

0

Набора атрибуты маршрутизации матча с вашим запросом URL, и либо вы должны префиксом Get в имя метода или необходимо поставить [HttpGet] аннотацию перед методом

[HttpGet] 
[Route("api/payment/SayHello")] 
public string SayHello() 
{ 
    return "Hello Jim"; 
} 

или переименовать имя метода и префикс Get, прежде чем он

[Route("api/payment/SayHello")] 
public string GetSayHello() 
{ 
    return "Hello Jim"; 
} 
+0

Нет. Теперь я получаю Error 405 Method Not Allowed. – CathalMF

+0

проверить обновление сейчас – Mostafiz

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