Как создать ссылку с контроллера на бритву?

Это не отличное решение, но просто нужно добавить другой вариант:

Вы можете разбивать многие большие XML-файлы на куски, особенно те, которые на самом деле являются списками похожих элементов (например, Я подозреваю, что файл, с которым вы работаете, будет).

, например, если ваш документ выглядит следующим образом:

<dmoz>
  <listing>....</listing>
  <listing>....</listing>
  <listing>....</listing>
  <listing>....</listing>
  <listing>....</listing>
  <listing>....</listing>
  ...
</dmoz>

Вы можете прочитать его в мега или два раза за раз , искусственно оберните несколько полных тегов <listing>, загруженных в тег корневого уровня, а затем загрузите их через simplexml / domxml (я использовал domxml при использовании этого подхода).

Честно говоря, я предпочитаю этот подход если вы используете PHP & lt; 5.1.2. С 5.1.2 и выше доступен XMLReader, который, вероятно, является лучшим вариантом, но до этого вы застряли либо с вышеупомянутой стратегией chunking, либо с старой SAX / expat lib. И я не знаю обо всех вас, но я не знаю, писать / поддерживать SAX / expat парсеров.

Обратите внимание, однако, что этот подход НЕ очень практичен, когда ваш документ не состоят из множества идентичных элементов нижнего уровня (например, он отлично подходит для любого списка файлов или URL-адресов и т. д., но не имеет смысла анализировать большой HTML-документ)

0
задан Tetsuya Yamamoto 18 February 2019 в 01:17
поделиться

2 ответа

Я не могу воспроизвести вашу проблему. У меня есть этот код внутри контроллера MVC, который является точно таким же кодом для генерации URL, который показан в вопросе:

public IActionResult Test()
{
    int number = 4;
    string callbackUrl = Url.Page(
        "/Test/Name",
        pageHandler: null,
        values: new { number },
        protocol: Request.Scheme);

    return Json(new
    {
        callbackUrl
    });
}

Кроме того, у меня есть страница Razor в /Pages/Test/Name.cshtml со следующим Содержание:

@page "{number}"
Hello @RouteData.Values["number"]!

Обратите внимание на спецификацию параметра маршрута number, который соответствует параметру маршрута, указанному в вызове Url.Page внутри контроллера.

Если я запускаю это приложение и открываю http://localhost:5000/Home/Test, то я получаю следующий ответ, который именно то, что я ожидаю получить:

{"callbackUrl":"http://localhost:5000/Test/Name/4"}

Если вы видите null вместо этого, шансы в том, что значение маршрута number не соответствует параметру на вашей странице Razor. В этом случае при маршрутизации не найдена подходящая страница Razor.

Если у вас есть непараметризованная страница Razor (т. Е. Просто @page без аргумента), ответ от действия MVC должен быть следующим, где значение маршрута предоставляется в качестве аргумента запроса:

{"callbackUrl":"http://localhost:5000/Test/Name?number=4"}
< hr>

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

0
ответ дан poke 18 February 2019 в 01:17
поделиться

В ASP.NET Core 2.2 появилась новая служба LinkGenerator, одноэлементная, которую можно вызывать вне контекста HTTP-вызова для генерации строки URL-адреса.

Пример:

public class SampleController : ControllerBase
{
  protected readonly LinkGenerator _linkGenerator;
  / ...

(а затем в методе действия):

return _linkGenerator.GetPathByAction(
     httpContext,
     controller: "Home",
     action: "Index",
     values: new { id=1 });
0
ответ дан Darkseal 18 February 2019 в 01:17
поделиться
Другие вопросы по тегам:

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