Как объявить действие MVC 5, как в Web API 2?

1

В Web Api я обычно объявляю такие действия:

[ResponseType(typeof(MyModel))]
    public async Task<IHttpActionResult> Get(HttpRequestMessage request, int accountId)
    {
      //get myModel

        return Ok(myModel);
    }

Мне нравится, что запрос передается, скорее получая его от контроллера. Делает ли MVC что-то подобное? Я искал, но не могу найти примеры или ссылки на эту способность.

edit: Кроме того, я хотел бы вернуть интерфейс. В основном я ищу что-то подобное в MVC:

 [ResponseType(typeof(MyModel))]
    public async Task<IActionResult> Get(HttpRequestMessage request, int accountId)
    {
      //get myModel

        return View(myModel);
    }
  • 0
    Web API был основан на MVC, синтаксис работает в обоих случаях. Вы пробовали что-то и нашли проблему?
  • 0
    Не является ли запрос принят в том , сам вид? Обычно вы бы отправили форму, если вы не делаете что-то AJAXy.
Показать ещё 3 комментария
Теги:
asp.net-mvc

2 ответа

1
Лучший ответ

Он немного отличается от MVC, Actions maps для взаимодействия с пользователем, а не напрямую с HttpRequest как таковым. Они предназначены для передачи в Model и ответа с помощью View(). Обычно вам не нужно проверять такие вещи, как заголовки и тип метода, потому что то, что вам нужно, является частью параметров метода. Если вам нужен View который будет использоваться для определенного типа метода, вы можете украсить его с помощью [HttpPost] или [HttpGet] и т.д.

Вы можете получить текущий HttpContext через статическое свойство HttpContext.Current.HttpRequest непосредственно из самого действия контроллера достаточно легко

  • 0
    Спасибо, это то, что мне нужно было знать. Является ли ActionResult текущим принятым объектом возврата? Или есть интерфейс, который я мог бы вернуть вместо?
  • 0
    @Mike_G - Вы выполнили возврат почти всего, но фреймворк обернет его в ContentResult, если это не ActionResult. (ContentResult является производным от ActionResult, как и ViewResult, JsonResult, FileResult и т. Д.). В MVC6 они также добавляют IActionResult в качестве опции, но это еще не выпущено.
0

Не уверен, почему вы бросаете вызов всем этим дополнительным вещам, вы можете просто вернуть JSON своего объекта, если необходимо, использовать его с Ajax. Украсьте метод с помощью [HttpPost], вы хотите только сообщение.

// Home/Get/1 (use 'id' in the constructor parameter)
// Home/Get/?accountID=1 (anything other than 'id' in the constructor)
public JSONResult Get(int id)
{  
     //To get the Current Request, just start typing Request
    Request.Browser();
    MyModel myModel = Get.MyModel(id);
    return JSON(myModel, allowget);
}

Использование его как задачи и сообщения. Я все еще не уверен, зачем нам это нужно, но ОК.

// FormVariable "accountID=1&userID=23"
[HttpPost]
public async Task<JSONResult> Get(int accountID, int userID)
{  
     //To get the Current Request, just start typing Request
    Request.Browser();
    MyModel myModel = await Get.MyModel(id);
    return JSON(myModel);
}
  • 0
    Да, как бы то ни было, я никогда этим не пользуюсь :), как вы можете сказать. Обновлено.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню