HTML找不到脚本

时间:2019-04-12 18:41:44

标签: c# html asp.net asp.net-web-api

我正在尝试以下代码来显示来自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!

有什么建议吗?

我该如何解决?

更新

我知道,如果脚本加载到服务器中,它将起作用!

我不知道是否可以将脚本加载到服务器上,也不知道这个好主意!

不好意思,我是这个领域的新手:) 谢谢

2 个答案:

答案 0 :(得分:0)

Web API 2控制器中的方法可能返回不同的类型。

  • void(仅将HTTP状态代码204返回给客户端)
  • HttpResponseMessage(Web API将返回值转换为HTTP响应文本)
  • IHttpActionResult(此接口的实现允许您创建在处理请求时实现不同方案的对象)

如有必要,我们可以创建自己的类:

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)

  • File.ReadAllText仅仅是一种从文件读取文本的方法
  • StringContent仅仅是存储要添加到响应正文中的文本的结构。

两个组件都不包括服务器端脚本编译器。

我认为这是MVC架构问题!您可能知道ASP.MVC提供了两种典型的Controller类型:Http.ApiController和Mvc.Controller!易于理解,ApiController通常仅用于处理数据,而没有配备用于处理Razor C#的功能。请使用Mvc.Controller来做到这一点!