маршрутизация строки запроса c # webapi - PullRequest
0 голосов
/ 08 января 2019

Ниже мой контроллер и действие:

[RoutePrefix("api/PaymentManagementController")]
public class PaymentManagementController : ApiController
{
    [HttpGet]
    [Route("")]
    public HttpResponseMessage CheckStatus(string commandType, string account, string txnId)
    {
    }
}

Вот WebApi.config:

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

Ссылка работает:

локальный: 59253 / API / PaymentManagementController CommandType = проверить и счета = ParamValue1 & txnId = SomePrefix0123456789

Тем не менее, я ожидал, что это:

локальный: 59253 / API / PaymentManagementController / CheckStatus CommandType = проверить и счета = ParamValue1 & txnId = SomePrefix0123456789

Даже после маркировки маршрутизации, как показано ниже:

[RoutePrefix("api/PaymentManagementController")]
public class PaymentManagementController : ApiController
{
    [HttpGet]
    [Route("CheckStatus/{commandType}/{account}/{txnId}")]
    public HttpResponseMessage CheckStatus(string commandType, string account, string txnId)
    {
    }
}

Я получаю сообщение об ошибке:

Не был найден ресурс HTTP, который соответствует URI запроса 'localhost: 59253 / api / PaymentManagementController? CommandType = check & account = ParamValue1 & txnId = SomePrefix0123456789'. На контроллере «PaymentManagement» не найдено никаких действий, соответствующих запросу.

Ответы [ 5 ]

0 голосов
/ 09 января 2019

Удалите «Controller» из RoutePrefix или удалите весь атрибут - контроллеры отображаются автоматически.

[RoutePrefix("api/PaymentManagement")]

Чтобы перейти с ожидаемой ссылкой без контроллера:

локальный: 59253 / API / PaymentManagement / CheckStatus CommandType = проверить и счета = ParamValue1 & txnId = SomePrefix0123456789

Я бы пошел с:

public class PaymentManagementController : ApiController
{
    public HttpResponseMessage CheckStatus(string commandType, string account, string txnId)
    {
    }
}

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

локальный: 59253 / API / PaymentManagementController / CheckStatus CommandType = проверить и счета = ParamValue1 & txnId = SomePrefix0123456789

public class PaymentManagementControllerController : ApiController
{
    public HttpResponseMessage CheckStatus(string commandType, string account, string txnId)
    {
    }
}
0 голосов
/ 09 января 2019

Вы определяете атрибуты на вашем контроллере, и он работает, как и ожидалось, используя Attribute Routing . Определенный URL в маршрутизации атрибутов работает следующим образом: Route Prefix / Route / Parameters и для вашего кода он будет работать для api/PaymentManagementController?commandType=check&account=ParamValue1&txnId=SomePrefix0123456789.

Чтобы получить запрошенный URL для работы, попробуйте этот код:

[RoutePrefix("api/PaymentManagementController")]
public class PaymentManagementController : ApiController
{
    [HttpGet]
    [Route("CheckStatus")]
    public HttpResponseMessage CheckStatus(string commandType, string account, string txnId)
    {
    }
}
0 голосов
/ 08 января 2019

как я писал выше,

[RoutePrefix("api/PaymentManagementController")]
public class PaymentManagementController : ApiController
{
    [HttpGet]
    [Route("CheckStatus")]
    public HttpResponseMessage CheckStatus(string commandType, string account, string txnId)
    {
    }

используйте тестовый URL:

локальный: 59253 / API / PaymentManagementController / CheckStatus CommandType = проверить и счета = ParamValue1 & txnId = SomePrefix0123456789

но второй шаблон, который вы попробовали, более современный:

[RoutePrefix("api/PaymentManagementController")]
public class PaymentManagementController : ApiController
{
    [HttpGet]
    [Route("CheckStatus/{commandType}/{account}/{txnId}")]
    public HttpResponseMessage CheckStatus(string commandType, string account, string txnId)
    {
    }
}

Вы должны проверить это, используя URL

локальный: 59253 / API / PaymentManagementController / CheckStatus / регистрация / ParamValue1 / SomePrefix0123456789

0 голосов
/ 08 января 2019
    Try it.
    [HttpGet]
    [Route("CheckStatus")]
    public HttpResponseMessage CheckStatus(string commandType, string account, string txnId)
    {
    }
0 голосов
/ 08 января 2019

Измените свой маршрут на

[HttpGet]
    [Route("CheckStatus")]
    public HttpResponseMessage CheckStatus(string commandType, string account, string txnId)
    {
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...