Возможно, вы могли бы использовать какие-то правила переписывания в web.config, чтобы перенаправить пользователя из напрямую связанного .cshtml к действующему действию или просто перенаправить / переписать его на страницу 404.
<system.webServer>
<rewrite>
<rules>
<rule name="rule1" patternSyntax="Wildcard" stopProcessing="true">
<match url="*.cshtml" />
<action type="Redirect" url="http://www.example.com/some404.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
Обновление: более сложная версия для Мариуса Шульца (который проголосовал за это, даже за грубый текайдо, который просил только 404).Это займет URL-адрес типа views/home/index.cshtml?key=value
и перенаправит его на home/index?key=value
.Это перенаправление 301, но это также может быть Rewrite или некоторый другой код состояния http - подробнее здесь
<rule name="cshtml" stopProcessing="true">
<match url="^views/([^/]+)/([^.]+)\.(?:cshtml|aspx)" />
<action type="Redirect" url="{R:1}/{R:2}" />
</rule>
Конечно, это работает без строки запроса (часть ?key=value
).Единственный недостаток этого заключается в том, что web.config не знает о ваших зарегистрированных маршрутах (обычно в Global.asax.cs).И, насколько мне известно, сейчас есть способ, которым это возможно.Для этого вам придется написать собственный код.Посмотрите на эту статью Фила Хаака и исходный код, который идет с ней.
(И, пожалуйста, не отказывайтесь от голосования только потому, что он не соответствует вашим потребностям, даже если яотвечая на вопрос другого человека.)