C # Response.Write Ошибка из скаффолдинга "dotnet new mvc" - PullRequest
0 голосов
/ 09 января 2019

Я знаком с PHP и JS, а также с методологией MVC, но я совершенно новичок в C # и потратил время на поиск документации по этой конкретной ошибке.

Я использовал dotnet new mvc для создания работающего приложения на порту 5000. Также обратите внимание, что я работаю в контроллере, а не в модели или представлении:

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 голосов
/ 09 января 2019

В ASPNET Core при написании API чаще возвращается объект или POCO вместо прямой записи в поток ответов (хотя это действительно возможно)

попробуйте изменить

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

до

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

это вернет 204 (без содержимого), однако вы можете передать данные в функцию OK, чтобы добавить тело к объекту ответа.

0 голосов
/ 09 января 2019

Если вы пытаетесь написать прямо в поток ответов, вы можете сделать это:

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

Однако я бы рекомендовал не делать этого в вашем реальном приложении, метод должен возвращать IActionResult. IMO, не рекомендуется писать напрямую в поток в методах вашего контроллера (не очень удобно для тестирования).

0 голосов
/ 09 января 2019

Я бы порекомендовал следовать руководству по microsofts по использованию ядра asp.net.

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";
        }
    }
}

Этот конкретный образец может быть полезен.

С этим классом URL https://localhost:5001/api/Help_Pdf возвращает "test"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...