Как обработать 'Представление, не найденное' InvalidOperationException в asp.net mvc?

set/frozenset

, Вероятно, легко пропущенный встроенный Python является "set/frozenset".

Полезный, когда Вы имеете список как это, [1,2,1,1,2,3,4] и только хотите uniques как это [1,2,3,4].

Используя набор () это точно, что Вы получаете:

>>> x = [1,2,1,1,2,3,4] 
>>> 
>>> set(x) 
set([1, 2, 3, 4]) 
>>>
>>> for i in set(x):
...     print i
...
1
2
3
4

И конечно получить количество uniques в списке:

>>> len(set([1,2,1,1,2,3,4]))
4

можно также найти, является ли список подмножеством другого набора использования списка () .issubset ():

>>> set([1,2,3,4]).issubset([0,1,2,3,4,5])
True

С Python 2.7 и 3.0 можно использовать фигурные скобки для создания набора:

myset = {1,2,3,4}

, а также понимания набора:

{x for x in stuff}

для получения дополнительной информации: http://docs.python.org/library/stdtypes.html#set

5
задан Liam - Reinstate Monica 9 October 2015 в 08:47
поделиться

3 ответа

Ксанди, Грег, Я ценю твои ответы. Эта статья ( Стратегии для ресурсных ошибок 404 в aspnet mvc ) помогла мне получить решение, которое я искал, довольно простым способом. Все, что мне нужно сделать, это переопределить Controller.OnException. Поскольку у меня есть только один контроллер, в котором мне нужно поведение, мне нужно только переопределить OnException в этом контроллере.

При этом мое решение лечит симптомы, а не болезнь, и, как вы оба предполагаете, было бы лучше проверить наличие существование файла до вызова this.View по пути.

Вот код, который я использовал для лечения симптомов:)

protected override void OnException(ExceptionContext filterContext)
{
    //InvalidOperationException is thrown if the path to the view
    // cannot be resolved by the viewengine
    if (filterContext.Exception is InvalidOperationException)
    {
        filterContext.ExceptionHandled = true;
        filterContext.Result = View("~/Views/Error/NotFound.aspx");
        filterContext.HttpContext.Response.StatusCode = 404;
    }

    base.OnException(filterContext);
}

Одна проблема, которую я не мог решить, - как отобразить представление NotFound в чистом виде. Обычно доступ к нему осуществляется через действие ErrorController NotFound. Мне пришлось жестко прописать путь к нему.

7
ответ дан 13 December 2019 в 22:13
поделиться

Я думаю, что лучше всего проверить, существует ли представление, внутри контроллера. Если вы инкапсулируете конструктор представления, не работает, то это может быть ASP.net отложить создание экземпляра View вне конструктора (не уверен, что это так).

Но вы можете попробовать вручную проверить и проверьте, существует ли путь или нет, используя Server.MapPath (), чтобы получить абсолютный путь к файлу и проверить, существует ли он.

0
ответ дан 13 December 2019 в 22:13
поделиться

Я бы просто вернул значение по умолчанию точки зрения, возможно, ответ 404 был бы уместен. Конечно, чтобы это работало, вам нужно немного изменить свою архитектуру.

Насколько я знаю, вам понадобится код, чтобы проверить, существует ли файл, как в вашем файле ASPX, если вы не хотите использовать стандартную структуру. Возможно, вам следует использовать ResolveURL или Url.Content , чтобы разрешить путь от вашего пути к приложению.

В качестве примечания, как правило, не совсем безопасно делать ваш домен (имена файлов) доступным для мир. Если ASPX ' s - это просто данные, тогда вы должны поместить текст в базу данных или в простые неисполняемые текстовые файлы. Если вы создаете какую-то CMS (т.е. вам действительно нужен способ «установки» функциональности), то вы можете рассмотреть возможность использования представления ASPX, содержащего частичные представления для инкапсуляции фрагментов кода ASP.NET.

Что касается получения на страницу 404, этот ответ может помочь.

0
ответ дан 13 December 2019 в 22:13
поделиться
Другие вопросы по тегам:

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