web-dev-qa-db-ja.com

Web Apiアクションからhtmlページを返す方法は?

デフォルトルートが特定のhtmlページを呼び出し元に返すWebApiの例を探しています。次のように設定されたルートとアクションがあります。彼は正しい場所にいるので、リダイレクトではなくindex.htmlページを送信したいだけです。

http://localhost/Site      // load index.html

// WebApiConfig.cs
config.Routes.MapHttpRoute(
    name: "Root",
    routeTemplate: "",
    defaults: new { controller = "Request", action = "Index" }
);

// RequestControlller.cs
    [HttpGet]
[ActionName("Index")]
public HttpResponseMessage Index()
{
    return Request.CreateResponse(HttpStatusCode.OK, "serve up index.html");
}

これを間違って使用している場合、より良いアプローチは何ですか?例を挙げていただけますか?

.NET 4.52を使用したWebApi 2

編集:うーん、それを改善しましたが、ページコンテンツの代わりにjsonヘッダーを取得します。

public HttpResponseMessage Index()
{
    var path = HttpContext.Current.Server.MapPath("~/index.html");
    var content = new StringContent(File.ReadAllText(path), Encoding.UTF8, "text/html");
    return Request.CreateResponse(HttpStatusCode.OK, content);
}

{"Headers":[{"Key":"Content-Type","Value":["text/html; charset=utf-8"]}]}
22

これを行う1つの方法は、ページを文字列として読み取り、コンテンツタイプ「text/html」の応答で送信することです。

名前空間IOを追加します。

using System.IO;

コントローラー内:

[HttpGet]
[ActionName("Index")]
public HttpResponseMessage Index()
{
    var path = "your path to index.html";
    var response = new HttpResponseMessage();
    response.Content =  new StringContent(File.ReadAllText(path));
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
    return response;
}
36
Marcus Höglund

ASP.NET Core(ASP.NET Standardではありません)の場合、静的なhtmlファイル(次のように見える)の場合は、静的なリソースオプションを使用します。

ASP.NET Coreの静的ファイル

2
Vivek