Asp. Сетевая маршрутизация: Как я игнорирую несколько подстановочных маршрутов?

Другим вариантом является перенос JSON-демпинга в свой класс:

import json

class FileItem:
    def __init__(self, fname):
        self.fname = fname

    def __repr__(self):
        return json.dumps(self.__dict__)

Или, что еще лучше, подклассификация класса FileItem из класса JsonSerializable:

import json

class JsonSerializable(object):
    def toJson(self):
        return json.dumps(self.__dict__)

    def __repr__(self):
        return self.toJson()


class FileItem(JsonSerializable):
    def __init__(self, fname):
        self.fname = fname

Тестирование:

>>> f = FileItem('/foo/bar')
>>> f.toJson()
'{"fname": "/foo/bar"}'
>>> f
'{"fname": "/foo/bar"}'
>>> str(f) # string coercion
'{"fname": "/foo/bar"}'
10
задан ArunPratap 25 April 2019 в 11:44
поделиться

2 ответа

Здесь существует два возможных решения.

  1. Добавьте ограничение к проигнорировать маршруту, чтобы удостовериться, что только запрашивает, чтобы это было проигнорировано, соответствовал бы тому маршруту. Довольно топорный, но это должно работать.

    RouteTable.Routes.IgnoreRoute("{folder}/{*pathInfo}", new {folder="content"});
    
  2. Что находится в Вашем каталоге содержания? По умолчанию Маршрутизация не направляет файлы, которые существуют на диске (на самом деле проверяет VirtualPathProvider). Таким образом, при помещении статического содержания в каталог Content Вам, возможно, не понадобился бы проигнорировать маршрут.

13
ответ дан 3 December 2019 в 20:45
поделиться

Это может быть довольно хитро.

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

Так как запрошенная информация для маршрута "/{*pathInfo} Содержания" полностью всегда удовлетворяется (никакие необходимые данные вообще в этом маршруте), и это около верхней части списка маршрутов, затем все Ваши попытки отобразиться на маршруты без имени будут соответствовать этому шаблону, и все Ваши URL будут основаны на этом ("Содержание? action=foo&controller=bar")

К сожалению, нет никакого пути вокруг этого с маршрутами действия. Если Вы используете названные маршруты (f.e., выбор Html. RouteLink вместо HTML. ActionLink), затем можно указать название маршрута для соответствия. Это менее удобно, но более точно.

IMO, сложные маршруты заставляют систему маршрутизации действия в основном упасть. В приложениях, где у меня есть что-то другое, чем маршруты по умолчанию, я почти всегда заканчиваю тем, что возвращался к основанному на именованном маршруте поколению URL, чтобы гарантировать, что я всегда получаю правильный маршрут.

5
ответ дан 3 December 2019 в 20:45
поделиться
Другие вопросы по тегам:

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