ASP.NET Web API'den HTML döndür


120

ASP.NET MVC Web API denetleyicisinden HTML nasıl döndürülür?

Aşağıdaki kodu denedim ancak Response.Write tanımlı olmadığı için derleme hatası aldım:

public class MyController : ApiController
{
    [HttpPost]
    public HttpResponseMessage Post()
    {
        Response.Write("<p>Test</p>");
        return Request.CreateResponse(HttpStatusCode.OK);
    }
 }

4
HTML döndürmek istiyorsanız neden WebAPI kullanıyorsunuz? Demek istediğim, ASP.NET MVC ve ASP.NET WebForms bunun için.
Stilgar

Teşekkürler, mükemmel. Denetleyiciyi normal denetleyiciye değiştirdim.
Andrus

18
@Stilgar Bunun bir nedeni, MVC yığınını kullanmaması, ne herhangi bir işleme motoru kullanmaması, ancak yine de bazı Html'ye bir sunucu cephesi sağlamak istemesi olabilirdi. Kullanım durumu, her şeyi daha sonraki bir aşamada işleyecek bir istemci tarafı şablon oluşturma motoru ile bazı Html veren bir Web Api'niz olması olabilir.
Patrick Desjardins

3
@Stilgar Karşılaştığım başka bir kullanım örneği, kullanıcı e-posta yoluyla sağladığınız bağlantıya tıkladığında, hesap oluşturma onayı için geri bildirim sağlamak için bir html sayfası döndürmek
wiwi

Yanıtlar:


257

ASP.NET Core. Yaklaşım 1

Denetleyiciniz genişlerse ControllerBaseveya yöntemi Controllerkullanabilirsiniz Content(...):

[HttpGet]
public ContentResult Index() 
{
    return base.Content("<div>Hello</div>", "text/html");
}

ASP.NET Core. Yaklaşım 2

ControllerSınıfları genişletmemeyi seçerseniz , yeni oluşturabilirsiniz ContentResult:

[HttpGet]
public ContentResult Index() 
{
    return new ContentResult 
    {
        ContentType = "text/html",
        Content = "<div>Hello World</div>"
    };
}

Eski ASP.NET MVC Web API'si

Medya türüyle dize içeriğini döndür text/html:

public HttpResponseMessage Get()
{
    var response = new HttpResponseMessage();
    response.Content = new StringContent("<div>Hello World</div>");
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
    return response;
}

1
ASP.NET MVC Core'da desteklenmiyor HttpResponseMessage
Parshuram Kalvikatte

@Parshuram Az önce ifadenizi kontrol ettim. HttpResponseMessage'ı ASP.NET Core'da kullanabilirim. System.Net.Http altında bulunur.
Andrei

ohk teşekkürler ama şimdi MediaTypeHeaderValue desteklenmiyor
Parshuram Kalvikatte

3
Bunu ASP.NET MVC 5 kullanarak yaptığımda yanıtı alıyorum. HTML içeriğinin hiçbirini geri alamıyorum. Aldığım tek şey "StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StringContent, Headers: {Content-Type: text / html}"
guyfromfargo

@guyfromfargo [Produces]yaklaşımı denedin mi?
Andrei

54

AspNetCore 2.0'dan başlayarak , bu durumda öznitelik ContentResultyerine kullanılması önerilir Produce. Bakınız: https://github.com/aspnet/Mvc/issues/6657#issuecomment-322586885

Bu, serileştirmeye veya içerik pazarlığına dayanmaz.

[HttpGet]
public ContentResult Index() {
    return new ContentResult {
        ContentType = "text/html",
        StatusCode = (int)HttpStatusCode.OK,
        Content = "<html><body>Hello World</body></html>"
    };
}

4
"Üretir" cevabını hiç 2.0'da çalışacak şekilde alamadım, ancak bu iyi çalışıyor.
philw

Dosyadan bir html göstermek istiyorsanız, "var content = System.IO.File.ReadAllText (" index.html ");"
Pavel Samoylenko

4
Evet, ASP.NET Core 2.0 kullanıyorsanız, gitmenin yolu budur!
James Scott

Ya HTML dosyası yerel dizindeyse ve ayrıca css, js bağlantılıysa. O halde dosyayı nasıl sunacağız?
Lingam

Razor Pages için, doğrudan ContentResult oluşturmak yerine PageModel Content () yöntemini çağırabilirsiniz. Bunun Denetleyiciler için de mevcut olup olmadığından emin değilim.
carlin.scott
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.