2012-06-02 3 views
1

Я пытаюсь запретить доступ к действию, возвращающему PartialViewResult; но это кажется невозможным. Если я помечаю метод действия с атрибутом NonAction, страница не будет отображаться, и если я этого не сделаю, возможно получить этот частичный вид с помощью URL-адреса.
Предположим, у меня есть это в _Layout.cshtml:Можно ли запретить доступ через URL-адрес к действию PartialViewResult

<section role="navigation"> 
    @Html.Partial("PageParts/Sidebar") 
    @RenderSection("SidebarContents", required: false) 
</section> 

и это PageParts/Sidebar.cshtml:

@Html.Partial("PageParts/Sidebar/Userinfo") 
@{Html.RenderAction("getNavigation", "PageSemantics");} 

и это PageSemanticsController.cs:

public class PageSemanticsController : Controller { 

    public PartialViewResult getNavigation() { 
     NavigationModel nm = new NavigationModel(); 
     return PartialView("PageParts/Sidebar/Navigation", nm); 
    } 
} 

и, наконец, это ~/Views/Shared/PageParts/Sidebar/Navigation.cshtml:

@model NavigationModel 
<nav id="main-nav"> 
    [... Some code to create Navigation ...] 
</nav> 

Эта настройка работает нормально, кроме ~/PageSemantics/getNavigation доступна по URL-адресу. Есть ли способ запретить доступ к getNavigation действию по URL-адресу при сохранении этой настройки?

ответ

5

попытка поставить атрибут

[ChildActionOnly] 

на вашем методе getNavigation()

+0

Спасибо, это возвращает сообщение как 'действие«getnavigation»доступен только ребенок request.' Можно ли вернуть 404 & le; – Achilles

+2

Я только что нашел http://stackoverflow.com/questions/7888121/how-to-prevent-certain-internal-routes-from-being-accessed-by-the-user –

+0

Спасибо, Есть способ вернуть 404 нить :) – Achilles