我正在尝试以下代码来显示来自webApi的html页面:
[AcceptVerbs("GET")]
[AllowAnonymous]
[Route("ManageAccount/{id}")]
public HttpResponseMessage ManageAccount(string id)
{
if (! String.IsNullOrEmpty(id))
{
var path = "C:/Users/user/Project/" + id + ".html";
var response = new HttpResponseMessage();
response.Content = new StringContent(File.ReadAllText(path));
response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
return response;
}
var path2 = "C:/Users/user/Project/Login.html";
var response2 = new HttpResponseMessage();
response2.Content = new StringContent(File.ReadAllText(path2));
response2.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
return response2;
// return Redirect("Login.html");
}
我将ContentType设置为text / html以读取html页面,但是此页面具有脚本,现在所有脚本都读取为text / html!
有什么建议吗?
我该如何解决?
更新:
我知道,如果脚本加载到服务器中,它将起作用!
我不知道是否可以将脚本加载到服务器上,也不知道这个好主意!
不好意思,我是这个领域的新手:) 谢谢
答案 0 :(得分:0)
Web API 2控制器中的方法可能返回不同的类型。
如有必要,我们可以创建自己的类:
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading;
using System.Threading.Tasks;
using System.Web.Http;
using SomeApp.Models;
public class HtmlResult : IHttpActionResult
{
private User model;
public HtmlResult(User model)
{
this.model = model;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
string user = "<html><head><meta charset=utf-8 /></head></body>" +
"<h2>" + user.Name + "</h2><h3>" + user.Login + "</h3><h3>"
+ user.Bday+ "</h3>" + "</body></html>";
var tmp = new HttpResponseMessage();
tmp.Content = new StringContent(user);
tmp.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
return Task.FromResult(tmp);
}
}
让我们尝试使用:
public IHttpActionResult GetUser(int id)
{
User user = _db.User.Find(id);
return new HtmlResult(user);
}
答案 1 :(得分:0)
两个组件都不包括服务器端脚本编译器。
我认为这是MVC架构问题!您可能知道ASP.MVC提供了两种典型的Controller类型:Http.ApiController和Mvc.Controller!易于理解,ApiController通常仅用于处理数据,而没有配备用于处理Razor C#的功能。请使用Mvc.Controller来做到这一点!