Заголовок ответа местоположения, возвращенный из веб-API в Swagger-ui

Я возвращаю Uri в качестве заголовка местоположения ответа от моего контроллера web-api, как показано ниже:

[HttpPost]
public HttpResponseMessage PostTenant([FromBody] JObject value)
{
    string tenantName;
    try
    {
        tenantName = value.GetValue("name").ToString();
    }
    catch (Exception e)
    {
        throw new HttpResponseException(
            this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, e));
    }

    try
    {
        DbInteract.InsertTenant(tenantName.Replace(" ", string.Empty));
        var uri = Url.Link("TenantHttpRoute2", new { tenantName });
        var response = new HttpResponseMessage(HttpStatusCode.Created);
        response.Headers.Location = new Uri(uri);
        return response;
    }
    catch...
}

Клиент swagger-ui отправляет запрос POST, но заголовки ответа не содержат uri Location. Это выглядит так:

POST-запрос из Swagger-ui

Как вы можете видеть на изображении, ЗАГОЛОВКИ ОТВЕТОВ имеют вид {"content-type": null}


JSON для этого почтового запроса:

        "post": {
            "tags": [
                "Tenant"
            ],
            "summary": "Add a new tenant",
            "description": "Adds a tenant and returns admin user account information to be used in further calls.",
            "consumes": [
                "application/json",
                "application/xml"
            ],
            "produces": [
                "application/json"
            ],
            "parameters": [
                {
                    "in": "body",
                    "name": "Tenant",
                    "description": "Name of the tenant must be alphanumeric without any special characters.",
                    "required": true,
                    "schema": {
                        "$ref": "#/definitions/CreateTenant"
                    }
                }
            ],
            "responses": {
                "201": {
                    "description": "Tenant Inserted",
                    "headers": [
                        {
                            "description": "Location",
                            "type": "string"
                        }
                    ]
                },
                "400": {
                    "description": "Invalid JSON Format of input"
                },
                "405": {
                    "description": "Tenant by this name already exists; Use PUT instead"
                },
                "500": {
                    "description": "InternalServerError"
                }
            }
        }

Что здесь не так? Почему я не вижу заголовок ответа в swagger-ui? Пожалуйста, дайте мне знать, если вам понадобится дополнительная информация. Спасибо


person Dee Say    schedule 28.11.2015    source источник


Ответы (2)


Намерение кажется достаточно ясным: успешный ответ возвращает 201 Created with a Location, указывающий на вновь созданный ресурс. Должно сработать ...

Я мог бы удалить атрибут «производит», поскольку вы нигде не определили ответ.

person Charlie Reitzel    schedule 06.12.2016

Попробуйте:

"headers" : {  "Location" : { "description": "...", "type" : "string" } }

Вместо того:

"headers" : [] 

так объект вместо массивов.

person Wim Ockerman    schedule 13.09.2017
comment
Чтобы улучшить свой ответ, возможно, вы можете отформатировать исходный код - person Kalamarico; 13.09.2017