Как получить путь к файлу в одном аргументе при передаче данных в контроллер MVC - PullRequest
0 голосов
/ 20 сентября 2019

В моем приложении ASP.Net MVC я пытаюсь передать три аргумента действию, которое выглядит следующим образом:

public ActionResult File(string hash, string eid, string filename) 

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

{ControllerName} / {ActionName} / {hash} / {eid} / {fileName}

, например, для C1 / A1 / 6CAE9919C0DDDDC49B5E6E6068E7B7A0 / S_FR_EID_002 / ITTTFileDB.p9 * 100 ** Я не хочу менять шаблон маршрута с формата "/" на?(обычный шаблон)

Теперь последнее имя файла параметров идет с именем папки / каталога, как показано ниже:

Folder1 / TestFolder / File1.pdf

и может быть вНа любом уровне в папке я хочу получить полное значение «Folder1 / TestFolder / File1.pdf» внутри аргумента fileName.Поэтому мой новый URL выглядит следующим образом:

C1 / A1 / 6CAE9919C0DDDDC49B5E6E6068E7B7A0 / S_FR_EID_002 / Folder1 / TestFolder / File1.pdf

Маршруты моих проектов настраиваются с использованием перезаписи URL в web.config, напримерниже:

<rewrite>
  <rules>
    <rule name="RewriteUserFriendlyURL1" stopProcessing="true">
      <match url="^content/attachment/([^/]+)/([^/]+)/([^/]+)/?$" />
      <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      </conditions>
      <action type="Rewrite" url="content/attachment/file?hash={R:1}&amp;eid={R:2}&amp;filename={R:3}" logRewrittenUrl="true" />
    </rule>
    <rule name="RewriteUserFriendlyURL2" stopProcessing="true">
      <match url="^content/attachment/([^/]+)/([^/]+)/([^/^]+)$" />
      <conditions>
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      </conditions>
      <action type="Rewrite" url="content/attachment/file?hash={R:1}&amp;eid={R:2}&amp;filename={R:3}" logRewrittenUrl="true" />
    </rule>
  </rules>
</rewrite>

1 Ответ

0 голосов
/ 20 сентября 2019

Использовать маршрут с *

[Route("{hash}/{eid}/{*filename}")]
[HttpGet]
public ActionResult File(string hash, string eid, string filename) 
{
}

or 

routes.MapRoute(
    "Upload",
    "file/{hash}/{eid}/{*filename}",
     new { controller = "Upload", action = "File", id = UrlParameter.Optional }
);
...