脚手架“ dotnet new mvc”的C#Response.Write错误

时间:2019-01-09 15:15:50

标签: c# model-view-controller

我熟悉PHP和JS以及MVC方法,但是我对C#完全陌生,并花了一些时间来查找有关此特定错误的文档。

我使用dotnet new mvc在端口5000上创建了可运行的应用程序。还要注意,我在Controller中工作,而不是模型或视图:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using ExelonPrime.Models;

namespace OptimusPrime.Controllers{
    public class ApiController : Controller
    {
        public void Help_Pdf()
        {
            Response.Write("test");
        }
    }
}

我得到的错误(尝试编译时)是:

error CS1061: 'HttpResponse' does not contain a definition for 'Write' and no accessible extension method 'Write' accepting a first argument of type 'HttpResponse' could be found (are you missing a using directive or an assembly reference?)

如果我缺少using指令,它是哪一个?我尝试了System.Web,但没有成功。我该如何进行这项工作?

3 个答案:

答案 0 :(得分:1)

我建议按照Microsoft教程中的有关使用asp.net core进行操作。

https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-mvc-app/?view=aspnetcore-2.2

就此特定实例而言,我会这样做而不是使用Response.Write

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using SampleWeb.Models;

namespace SampleWeb.Controllers
{
    public class ApiController : Controller
    {
        [HttpGet]
        public ActionResult<string> Help_Pdf()
        {
            return "test";
        }
    }
}

这个特定的sample可能会有所帮助。

对于此类,URL https://localhost:5001/api/Help_Pdf返回“测试”

答案 1 :(得分:1)

在ASPNET Core中,编写API时,更常见的是返回对象或POCO,而不是直接写入响应流(尽管确实有可能)

尝试更改您的

public void Help_Pdf()
{
    Response.Write("test");
}

[HttpGet()]
public IActionResult Help_Pdf()
{
    return Ok();
}

这将返回204(无内容),但是您可以将数据传递给OK函数,以将正文添加到响应对象。

答案 2 :(得分:0)

如果您尝试像这样直接写入响应流,则可以执行以下操作:

public async Task Help_Pdf()
{
    await Response.WriteAsync("Test");
}

但是,我建议您不要在实际的应用程序中执行此操作,该方法应返回IActionResult。 IMO并不是在控制器方法中直接写入流(不是非常易于测试的)的好习惯。