2013-06-20 3 views
0

У меня есть компонент на основе флэша, который настаивает на просить файл настройки XML в любом «директории» Я в настоящее время.MVC3 маршрут по запрошенному файлу

Это означает, что он просит пути, как ...

/Home/mysettings.xml 
/Home/Record/mysettings.xml 
/AnotherController/AnotherAction/mysettings.xml 

Это раздражает. Я пытаюсь создать маршрут MVC, чтобы поймать что-либо с mysettings.xml и отправить их статическому действию. Я создал представление для XML, и возможно, мне нужно будет менять переменные «на лету» (возможно, с помощью URL-запросов).

Вот первый удар в моей Global.asax.cs:

routes.MapRoute(
    "XmlOverride", 
    "mysettings.xml", 
    new { controller = "Home", action = "MyXML" } 
); 

Но я что-то не хватает. Это либо 404ing, либо не подходит в нужное место независимо от того, что я делаю с ним. Есть ли способ, которым я могу заставить его перейти к правильному действию? Могу ли я сохранить URL-адреса в этом процессе?

Спасибо!

Update

У меня есть изрубил версия работает как это. Я не уверен, что это лучший способ, но он работает. У кого-нибудь есть лучшие решения?

routes.MapRoute(
    "XmlOverride", 
    "{c}/mysettings.xml", 
    new { controller = "Home", action = "MyXML" } 
); 
routes.MapRoute(
    "XmlOverride+Action", 
    "{c}/{a}/mysettings.xml", 
    new { controller = "Home", action = "MyXML" } 
); 

Вы не можете использовать {controller} или {action}, потому что это по фиксированному пути.

ответ

1

На основании this answer вы можете переписать URL-адрес.

<rewrite> 
    <rules> 
    <rule name="MySettingsRewrite"> 
     <match url="(\w+)mysettings\.xml$" /> 
     <action type="Rewrite" url="/Home/MyXML" /> 
    </rule> 
    </rules> 
</rewrite> 

Вам придется дважды проверять регулярное выражение, не будучи уверенным, что я получил это право.

Единственный другой вариант, о котором я могу думать, это реализовать свой собственный класс Hande Handler и использовать его.

+0

Если сайт перемещается в подкаталог, это правило относительное? – jocull

+0

Я не тестировал это, вы можете использовать 'url =" ~/home/myxml "' – Jay

Смежные вопросы