Проверка правильности передачи параметра в представлении в ASP. NET Базовое веб-приложение - PullRequest
0 голосов
/ 30 апреля 2020

У меня проблема с моим веб-приложением. Мне удалось найти шутки и отобразить те, которые содержат определенное слово (с помощью API https://icanhazdadjoke.com/), но я не знаю, как отобразить их лучше, чем это:

У меня есть asyn c Метод задачи, который ищет шутки:

    [HttpPost]
    public async Task<List<string>> SearchJoke()
    {
        string searchedWord = Request.Form["word"];
        var client = _httpClientFactory.CreateClient("API Client");
        string url = client.BaseAddress + "search?term=" + searchedWord;
        string responseBody = await client.GetStringAsync(url);

        JokesModel jokes = JsonConvert.DeserializeObject<JokesModel>(responseBody);
        List<string> list = new List<string>();

        for (int i = 0; i < jokes.Results.Count; i++)
        {
            list.Add(jokes.Results[i].Joke);
        }

        return list;           
    }

И я просто возвращаю View, как это:

    public IActionResult Index()
    {
        return View();
    }

Я планирую написать что-то вроде этого:

    public IActionResult Index()
    {
        //check if the word was passed and redirect to the another View which displays jokes
        // else show some message that the word is incorrect or there are no jokes contain that word

    }

Я попытался проверить, было ли слово передано, и написал другой метод:

    [HttpPost]
    public bool GetWord()
    {
        string searchedTerm = Request.Form["word"];
        if (searchedTerm != null)
            return true;
        return false;
    }

И сделать что-нибудь как это:

     public IActionResult Index()
    {
        if (GetWord())
        {
            return RedirectToAction(nameof(HomeController.SearchJoke), "Home");
            //this is the page where I display joke in more readable way
        }
        return View();
    }

Но я получил ошибку: «System.InvalidOperationException:« Неверный тип содержимого: », когда я хочу загрузить слово в метод GetWord ().

Кто угодно может дайте мне какой-нибудь совет или поможете мне с этой проблемой?

1 Ответ

0 голосов
/ 01 мая 2020

получено сообщение об ошибке: «System.InvalidOperationException:« Неверный тип содержимого: », когда я хочу загрузить слово в методе GetWord ()

Фрагмент кода string searchedTerm = Request.Form["word"]; проверит Заголовок Content-Type для типов форм, и если HttpRequest.HasFormContentType имеет значение false, будет выдано указанное выше исключение.

Чтобы исправить вышеуказанную ошибку, вы можете обратиться к следующему коду:

public IActionResult Index()
{
    var searchedTerm = "";

    if (!Request.HasFormContentType)
    {
        //get searchTerm from querystring

        searchedTerm = Request.Query["word"];

        //code logic here
    }
    else
    {
        if (GetWord())
        {

        }

        //code logic here
    }

    return View();
}

internal bool GetWord()
{
    string searchedTerm = Request.Form["word"];

    if (searchedTerm != null)
        return true;
    return false;
}

Кроме того, вы можете попытаться изменить подход поиска функциональности, чтобы передавать и получать данные через QueryString.

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