Подчеркивания не являются допустимыми именами переменных, они используются для игнорирования переменных. Два подчеркивания в (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])(_.::(_))
Вы не сможете использовать [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);
Вы посмотрели на Просто Успокоительную Маршрутизацию? Это уже делает это.
Отредактированный февраль 2010 для добавления: переопределения Метода встроены в MVC 2.
Вы могли создать ActionFilter, который реализует OnActionExecuting
, который стреляет, прежде чем действие контроллера вызывается. Вы могли затем опросить заголовки запроса и перенаправить на основе значения X-HTTP-Method-Override
заголовок, когда существующий.
X-HTTP-Method-Override
пользовательский заголовок и скорее всего не поддерживается Вашим веб-контейнером.
Вы называете это от веб-страницы? Если так, необходимо, вероятно, использовать XmlHttpRequest
с DELETE
(или безотносительно глагола Вы хотите). Еще лучше используйте платформу JS, чтобы сделать тяжелый подъем для Вас.
Код Rosetta может оказаться полезным. Цитирую сайт: -
-121--2344608-Rosetta Code является сайтом программирования хрестоматии. Идея состоит в том, чтобы представить решения одной и той же задачи на как можно большем количестве различных языков, продемонстрировать, как языки похожи и различны, и помочь человеку с основами в одном подходе к проблеме в изучении другого. Код Rosetta в настоящее время имеет 372 задачи и охватывает 197 языков, хотя у нас нет (и не может) решений каждой задачи на каждом языке.
Я предпочитаю использовать 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;
Будьте осторожны с этим подходом! Смотрите соответствующую публикацию Стивена Уолтера.
Надеюсь, это кому-то поможет.
Вставить в форму:
<%= Html.HttpMethodOverride(HttpVerbs.Delete) %>