ASP.Net Web API Http-маршрутизация и не JSON-ответы - PullRequest
0 голосов
/ 13 ноября 2018

Я хочу имитировать поведение существующего веб-сервиса.Вот очень упрощенный пример, показывающий, чего я хочу достичь.

Я использую маршрутизацию ASP.Net Web API: с ним довольно просто настроить маршруты.

Требования, часть 1: query:

GET whatever.../Person/1

должен вернуть JSON:

Content-Type: application/json; charset=utf-8
{"id":1,"name":"Mike"}

Это просто:

public class Person
{
    public int ID { get; set; }
    public string Name { get; set; }
}

// In ApiController
[HttpGet]
[Route("Person/{id}")]
public Person GetPerson(int id)
{
    return new Person
    {
        ID = id,
        Name = "Mike"
    };
}

Требования, часть 2: запрос:

GET whatever.../Person/1?callback=functionName

должен вернуть javascript:

Content-Type: text/plain; charset=utf-8
functionName({"id":1,"name":"Mike"});

Есть идеи, как этого добиться (часть 2)?

1 Ответ

0 голосов
/ 13 ноября 2018

Необходимо изменить ApiController для удовлетворения желаемого поведения

Простой пример на основе предоставленного кода

//GET whatever.../Person/1
//GET whatever.../Person/1?callback=functionName
[HttpGet]
[Route("Person/{id:int}")]
public IHttpActionResult GetPerson(int id, string callback = null) {
    var person = new Person {
        ID = id,
        Name = "Mike"
    };

    if (callback == null) {
        return Ok(person); // {"id":1,"name":"Mike"}
    }

    var response = new HttpResponseMessage(HttpStatusCode.OK);

    var json = JsonConvert.SerializeObject(person);

    //functionName({"id":1,"name":"Mike"});
    var javascript = string.Format("{0}({1});", callback, json);

    response.Content = new StringContent(javascript, Encoding.UTF8, "text/plain");

    return ResponseMessage(response);
}

Конечно, вам необходимо выполнить правильную проверку обратного вызова, так как это в настоящее время открывает API для внедрения скрипта.

...