2016-10-06 6 views
0

Могу ли я использовать атрибут маршрута для контроллера, и у атрибута есть параметры, а не только константная строка в ASP.NET Core? ex. Я хочу, чтобы добавить контроллер нижеприведенного определенияМогу ли я добавить маршрут для контроллера с параметрами?

[Route("api/sth/{Id}/sth2/latest/sth3")] 
public class MyController : Controller 
{ 
    public object Get() 
    { 
     return new object(); 
    } 
} 

ответ

1

наверняка вы можете, но это, как правило, сложнее, если вы не планируете хорошо.

Давайте предположим, что ваш класс Owin Startup устанавливается по умолчанию WebAPI маршруты с app.UseMvc()

Этот код ниже работает отлично и возвращает ["value1", "value2"] независимо от значения {id}

curl http://localhost:5000/api/values/135/foo/bar/

[Route("api/values/{id}/foo/bar")] 
public partial class ValuesController : Controller 
{ 
    [HttpGet] 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2" }; 
    } 
} 

это работает штраф также, возвращая указанное значение в параметре маршрута в этом случае 135

curl http://localhost:5000/api/values/135/foo/bar/

[Route("api/values/{id}/foo/bar")] 
public partial class ValuesController : Controller 
{ 
    [HttpGet] 
    public int GetById(int id) 
    { 
     return id; 
    } 
} 

Но если объединить эти 2 действия в том же контроллере, он будет возвращать 500, поскольку есть 2 способа, которые могут реагировать ваш запрос.

1

Вы можете использовать RoutePrefix способа, аналогичного этому, а затем добавить Route с для каждого метода по мере необходимости. Параметры, определенные в префиксе маршрута, по-прежнему передаются методу таким же образом, как указание их в маршруте метода.

Например, вы могли бы сделать это:

[RoutePrefix("api/sth/{id}/sth2/latest/sth3")] 
public class MyController : ApiController 
{ 
    /// <example>http://www.example.com/api/sth/12345/sth2/latest/sth3</example> 
    [Route()] // default route, int id is populated by the {id} argument 
    public object Get(int id) 
    { 
    } 

    /// <example>http://www.example.com/api/sth/12345/sth2/latest/sth3/summary</example> 
    [HttpGet()] 
    [Route("summary")] 
    public object GetSummary(int id) 
    { 
    } 

    /// <example>http://www.example.com/api/sth/12345/sth2/latest/sth3/98765</example> 
    [HttpGet()] 
    [Route("{linkWith}")] 
    public object LinkWith(int id, int linkWith) 
    { 
    } 
} 
+0

В ядре ASP.NET мы также можем использовать RoutePrefix? –

+0

Я не использовал .NET Core, поэтому не мог сказать, извините. Если вы используете .NET Core, я бы добавил это к вашему вопросу. –

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

  • Нет связанных вопросов^_^