c # webapi со строкой запроса - PullRequest
       14

c # webapi со строкой запроса

0 голосов
/ 09 декабря 2018

У меня есть веб-сервис с поддержкой WebApi:

public class ControllerName : ApiController
{
    [Route("api/ControllerName/{p1}/{p2}/{p3}/{p4}/{p5}")]
    public string GetItemByNameAndId(string p1, string p2, string p3, string p4, string p5)
    {

    }
}

Этот тип запроса работает:

host / api / ControllerName / 1/2/3/4/5

Но я хочу запрос такого типа:

host / api / ControllerName / & p1 = 1 & p2 = 2 & p3 = 3 & p4 = 4 & p5 = 5

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

Потенциально опасное значение Request.Path было обнаружено клиентом (&).Какие шаги должны быть выполнены?Любые изменения в конфигурационных файлах, любые атрибуты и т. Д.

Спасибо за ваше время.

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

слишком много параметров не очень хороший дизайн design, и это может быть рефакторинг к классу параметров.

public class ParamClass {
    public string P1 { get; set; }
    public string P2 { get; set; }
    public string P3 { get; set; }
    public string P4 { get; set; }
    public string P5 { get; set; }
}

и в вашем контроллере API используйте его следующим образом:

//GET api/ControllerName?host/api/ControllerName?p1=1&p2=2&p3=3&p4=4&p5=5
[HttpGet]
[Route("")]
public IHttpActionResult GetItemByNameAndId([FromUri(PreFix="")] ParamClass param) {
    //...
    return Ok(someResult);
}
0 голосов
/ 10 декабря 2018

Если вы не хотите, чтобы запрос первого типа

host/api/ControllerName/1/2/3/4/5

Затем удалите их из шаблона маршрута

[RoutePrefix("api/ControllerName")]
public class ControllerName : ApiController {
    //GET api/ControllerName?p1=1&p2=2&p3=3&p4=4&p5=5
    [HttpGet]
    [Route("")]
    public IHttpActionResult GetItemByNameAndId(string p1, string p2, string p3, string p4, string p5) {
        //...
        return Ok(someResult);
    }
}

, чтобы версия строки запроса отображалась на действие контроллера.

...