Действительно ли возможно реализовать X-HTTP-Method-Override в ASP.NET MVC?

Подчеркивания не являются допустимыми именами переменных, они используются для игнорирования переменных. Два подчеркивания в (c, _) и _ ::: c не связаны.

  • (c, _) => { ... } полностью игнорирует второй параметр, он пропал.
  • _ ::: c является сокращением для лямбда-выражения x => x ::: c, которое ожидает x, который является List[B_] для некоторого неизвестного типа B_, который не может быть выведен, потому что это не ожидается, и это нигде найти в вашем коде.

Если вы хотите добавить второй аргумент к первому, вам нужно написать что-то вроде

ls.foldLeft(List.empty[Int])((c, x) => x :: c)

или даже

ls.foldLeft(List.empty[Int])(_.::(_))
5
задан bignose 1 May 2009 в 07:06
поделиться

6 ответов

Вы не сможете использовать [AcceptVerbs] атрибут как есть, так как он связывается с фактическим глаголом HTTP запроса. К счастью, [AcceptVerbs] атрибут очень прост; Вы видите источник для себя по http://www.codeplex.com/aspnet/SourceControl/changeset/view/21528#266431.

Короче говоря, подкласс AcceptsVerbsAttribute и переопределение IsValidForRequest () метод. Реализация была бы чем-то как следующее:

string incomingVerb = controllerContext.HttpContext.Request.Headers["X-HTTP-Method-Override"] ?? controllerContext.HttpContext.Request.Method;
return Verbs.Contains(incomingVerb, StringComparer.OrdinalIgnoreCase);
5
ответ дан 18 December 2019 в 12:02
поделиться

Вы посмотрели на Просто Успокоительную Маршрутизацию? Это уже делает это.

Отредактированный февраль 2010 для добавления: переопределения Метода встроены в MVC 2.

1
ответ дан 18 December 2019 в 12:02
поделиться

Вы могли создать ActionFilter, который реализует OnActionExecuting, который стреляет, прежде чем действие контроллера вызывается. Вы могли затем опросить заголовки запроса и перенаправить на основе значения X-HTTP-Method-Override заголовок, когда существующий.

0
ответ дан 18 December 2019 в 12:02
поделиться

X-HTTP-Method-Override пользовательский заголовок и скорее всего не поддерживается Вашим веб-контейнером.

Вы называете это от веб-страницы? Если так, необходимо, вероятно, использовать XmlHttpRequest с DELETE (или безотносительно глагола Вы хотите). Еще лучше используйте платформу JS, чтобы сделать тяжелый подъем для Вас.

0
ответ дан 18 December 2019 в 12:02
поделиться

Код Rosetta может оказаться полезным. Цитирую сайт: -

Rosetta Code является сайтом программирования хрестоматии. Идея состоит в том, чтобы представить решения одной и той же задачи на как можно большем количестве различных языков, продемонстрировать, как языки похожи и различны, и помочь человеку с основами в одном подходе к проблеме в изучении другого. Код Rosetta в настоящее время имеет 372 задачи и охватывает 197 языков, хотя у нас нет (и не может) решений каждой задачи на каждом языке.

-121--2344608-

Я предпочитаю использовать ConvertAll, так как это быстрее и я считаю более интуитивно понятным.

var a = a.ConvertAll(x => x + "!").ToArray();
-121--2383225-

Ответ Леви велик. Кроме того, я добавил чек в пользовательский AcceptsVeraseAttribute, который также исследует коллекцию FORM, так что можно просто ввести скрытый ввод, чтобы запустить DELETE (аналогично Html.StartMethodOverride MVC 2).

<input name="X-HTTP-Method-Override" type="hidden" value="DELETE" />

Измените назначение incomingVerb на:

string incomingVerb = controllerContext.HttpContext.Request.Headers["X-HTTP-Method-Override"] ?? controllerContext.HttpContext.Request.Form["X-HTTP-Method-Override"] ??controllerContext.HttpContext.Request.HttpMethod;

Будьте осторожны с этим подходом! Смотрите соответствующую публикацию Стивена Уолтера.

Надеюсь, это кому-то поможет.

3
ответ дан 18 December 2019 в 12:02
поделиться

Вставить в форму:

<%= Html.HttpMethodOverride(HttpVerbs.Delete) %>
3
ответ дан 18 December 2019 в 12:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: