WebApi dan menggunakan Swagger

Saya telah mengimplementasikan proyek WebApi yang memiliki swashbuckle/swagger dan DelegatingHandler khusus. Saya telah menambahkan SwaggerAccessMessageHandler untuk memeriksa apakah permintaan angkuh dibuat dalam hal ini saya tidak ingin penangan khusus saya dijalankan.

Saya telah mendaftarkan penangan pesan sebagai

GlobalConfiguration.Configuration.MessageHandlers.Add(new SwaggerAccessMessageHandler());

dengan implementasi khusus:

public class SwaggerAccessMessageHandler : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        if (IsSwagger(request))
        {
            var response = request.CreateResponse(HttpStatusCode.Unauthorized);
            return Task.FromResult(response);
        }
        else
        {
            return base.SendAsync(request, cancellationToken);
        }
    }

    private bool IsSwagger(HttpRequestMessage request)
    {
        return request.RequestUri.PathAndQuery.StartsWith("/swagger");
    }
}

Tetapi ketika saya dapat menggunakan WebApi saya dengan /swagger, saya mendapatkan halaman kosong, bukan ui swagger.

PEMBARUAN: Oke, saya telah menghapus pengendali Swagger untuk saat ini. Saya telah menambahkan AuthenticationHandler baru yang memeriksa userKey yang valid di string permintaan permintaan masuk. Saya tidak dapat mengakses kesombongan sekarang. Apakah ada jalan keluarnya sehingga ketika saya ingin mengakses kesombongan, penangan khusus saya tidak dipanggil?


person wakthar    schedule 14.07.2017    source sumber
comment
Silakan lihat pembaruan di atas.   -  person wakthar    schedule 14.07.2017


Jawaban (1)


Anda mendapat halaman kosong karena Anda menggunakan layanan REST dan Anda tidak mengatakan apa pun di isi. Browser Anda akan mengembalikan header 401 yang tidak terlihat oleh pengguna. Anda harus mengubah respons berikut ini

var response = request.CreateResponse(HttpStatusCode.Unauthorized,"You are not authorized");

Pembaruan UPDATE: Ok I have removed the Swagger handler for now. I have added a new AuthenticationHandler which checks for a valid userKey in the incoming request querystring. I cannot access swagger now. Is there a way around this so when I want to access swagger my custom handler is not called? Tidak ada DelegatingHanlers yang dieksekusi sebagai titik masuk. Mengikuti cara kerja webapi Pipeline:
masukkan deskripsi gambar di sini

Seperti yang mungkin Anda perhatikan, Anda tidak memiliki kendali atas saluran untuk melewati penangan pesan apa pun. Di AuthenticationHandler Anda, Anda harus memeriksa apakah PathAndQuery Anda berisi kesombongan, cukup jalankan yang berikut ini

base.SendAsync(request, cancellationToken);
person BRAHIM Kamel    schedule 14.07.2017