标签: asp.net-mvc-areas

可以在ASP.NET MVC 2中的区域级别进行[授权]吗?

[Authorize]利用控制器和动作上的属性来限制访问是非常棒的.

是否可以在MVC 2中为整个区域执行等效操作?我可以限制区域范围内的访问权限取决于角色/用户/中心位置的任何内容,而不是在所有控制器中乱丢它们?

c# authorization asp.net-mvc-areas asp.net-mvc-2

3
推荐指数
1
解决办法
1310
查看次数

Asp.net MVC领域的自定义Html助手

我为我的Asp.net MVC 3应用程序提供了一些自定义的Html助手.在主应用程序中,它们正常工作,因为我已将以下内容放入我的Web.Config:

<pages clientIDMode="AutoID">
  <namespaces>
    <add namespace="System.Web.Helpers" />
    <add namespace="System.Web.Mvc" />
    <add namespace="System.Web.Mvc.Ajax" />
    <add namespace="System.Web.Mvc.Html" />
    <add namespace="System.Web.Routing" />
    <add namespace="System.Web.WebPages"/>
    <add namespace="WebDibaelsaMVC.Utils.HtmlHelpers" />
    <add namespace="WebDibaelsaMVC.Utils.HtmlHelpers.DTOs" />
  </namespaces>
</pages>
Run Code Online (Sandbox Code Playgroud)

但我现在已经创建了一个区域并使我的自定义助手工作,我必须在我使用它们的每个页面中添加一个使用.有没有办法为该区域添加默认名称空间?

asp.net-mvc-areas razor asp.net-mvc-3

3
推荐指数
1
解决办法
1653
查看次数

从根请求调用区域控制器

我的ASP.NET MVC3应用程序中有一些区域:

namespace MyProject.Areas.myarea
{
    public class myareaAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "myarea";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "myarea_default",
                "myarea/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这个区域包含"Hello"控制器,带有"Smile"动作.

在整个项目的global.asax文件中,我有:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", 
            "{controller}/{action}/{id}", 
            new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

    }

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }
Run Code Online (Sandbox Code Playgroud)

所以,当我请求"localhost/myarea/hello/smile"时,它按预期调用适当的控制器.

但!当我请求"localhost/hello/smile"时,它会调用hello控制器STILL!有了它,它会查找不在myarea/Views文件夹中的Views,而是在〜/ …

asp.net-mvc-routing asp.net-mvc-areas asp.net-mvc-3

3
推荐指数
1
解决办法
1183
查看次数

如何在/ api/v1上实现版本化的WebApi

我想在现有的MVC项目中构建一个版本化的WebApi,以便我的URL可以

/api/v1/account
/api/v2/account
Run Code Online (Sandbox Code Playgroud)

我目前不使用区域,但经过一些研究后,我认为这对我Areas有用,但显然你无法嵌套(我目前正在使用MVC4,但可以升级到5).

我怎样才能做到最好?

更新

我最终使用了这个

c# asp.net-mvc asp.net-mvc-areas asp.net-mvc-4 asp.net-web-api

3
推荐指数
1
解决办法
3272
查看次数

使用区域失败的RedirectToRouteResult

我正在使用自定义过滤器检查特定Action的用户访问权限,我有一个名为Admin的区域.当过滤器重定向未授权用户时,其重定向内部区域但不重定向到路径目录中的视图.
例如,当我访问http:// localhost/admin/roles时,我希望未经授权的用户将被重新安装到http:// localhost/authorized但不会被重新安装到http:// localhost/admin/authorized.
这是我如何使用过滤器:

   public override void OnAuthorization(AuthorizationContext filterContext)
        {
            DigitalHubOnlineStoreEntities db = new DigitalHubOnlineStoreEntities();
            RbacUser requestingUser = new RbacUser();
            var controllerid = RbacUser.GetControllerId(filterContext.ActionDescriptor.ControllerDescriptor.ControllerName);
            var actionid = RbacUser.GetActionId(filterContext.ActionDescriptor.ActionName, controllerid);          
            if (!requestingUser.GetUserPermission(HttpContext.Current.User.Identity.Name, actionid, controllerid))
            {
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "action", "Index" }, { "controller", "Unauthorized" } });
            }
        }
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc asp.net-mvc-areas asp.net-mvc-filters

3
推荐指数
1
解决办法
3298
查看次数

当 ASP.NET Core 视图位于某个区域时,Visual Studio 不会部署它们

设置

  • Visual Studio 2015(包含更新 3 和截至今天的最新修补程序)
  • 已安装 .NET Core SDK(预览版 2)
  • 创建一个新的 ASP.NET Core 项目
  • 添加一个新区域,注册它并在其中添加视图
  • 使用 Visual Studio 中的 Web 部署将其部署到 IIS

我的project.json的一部分

"publishOptions": {
  "include": [
    "wwwroot",
    "Views",
    "Areas/**/Views",
    "appsettings.json",
    "web.config"
  ]
},
Run Code Online (Sandbox Code Playgroud)

我的发布个人资料

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>MSDeploy</WebPublishMethod>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish>http://somedomain/</SiteUrlToLaunchAfterPublish>
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <PublishFramework>netcoreapp1.0</PublishFramework>
    <UsePowerShell>True</UsePowerShell>
    <EnableMSDeployAppOffline>True</EnableMSDeployAppOffline>
    <MSDeployServiceURL>http://someip</MSDeployServiceURL>
    <DeployIisAppPath>sitename</DeployIisAppPath>
    <RemoteSitePhysicalPath />
    <SkipExtraFilesOnServer>True</SkipExtraFilesOnServer>
    <MSDeployPublishMethod>RemoteAgent</MSDeployPublishMethod>
    <EnableMSDeployBackup>False</EnableMSDeployBackup>
    <UserName>username</UserName>
    <_SavePWD>True</_SavePWD>
    <PublishDatabaseSettings>
      <Objects xmlns="" />
    </PublishDatabaseSettings>
    <ADUsesOwinOrOpenIdConnect>False</ADUsesOwinOrOpenIdConnect>
    <AuthType>NTLM</AuthType>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

问题

成功部署后,服务器中缺少区域视图。没有Area文件夹,该区域的视图也不位于Views文件夹中。所有其他视图(区域外)均存在。

我做错了什么还是这个问题是已知的?有人遇到同样的问题吗?如果有,解决方案是什么?

asp.net-mvc-areas asp.net-mvc-views webdeploy visual-studio-2015 asp.net-core

3
推荐指数
1
解决办法
2572
查看次数

无法找到布局视图“~/Views/Shared/_Layout.cshtml”

下图显示了我正在处理的项目结构:

在此输入图像描述

在区域 -> 计费 -> 视图 -> _viewstart.cshtml 内部,我已指定要应用于整个应用程序的布局的路径,但我不断收到以下错误:

  • 错误:

InvalidOperationException:无法找到布局视图“~/Views/Shared/_Layout.cshtml”。搜索了以下位置:~/Views/Shared/_Layout.cshtml

  • 布局路径

    @{ 布局 = "~/Views/Shared/_Layout.cshtml"; }

asp.net-mvc-areas asp.net-core-mvc

3
推荐指数
1
解决办法
1万
查看次数

如何在MVC 3中的某个区域渲染主项目中的部分?

我有一个MVC 3 Razor项目.它有一个叫Admin的区域.我在项目的Views/Shared文件夹中具有页面的基本布局(默认情况下).我在主项目中有一个名为Common的控制器.它将负责布局的某些部分,这些部分基于业务逻辑(基于角色的导航等).我有

@Html.Action("Navigation", "Common")

在_layout.cshtml文件中调用.这被设置为渲染导航栏.当我转到管理区域中的路由("admin/somedomainobject/add")时,运行时错误指出以下内容:

"路径控制器"/ admin/somedomainobject/add"未找到或未实现IController."

当我从布局中删除线条时,它存在很好.如果我使用上述语法或以下语法,则会发生错误:

@{Html.RenderAction("Naviation", "Common");}
Run Code Online (Sandbox Code Playgroud)

是因为我在使用区域吗?我是否以错误的方式使用主项目文件夹?

任何想法将不胜感激!

partial-views asp.net-mvc-areas razor asp.net-mvc-3

2
推荐指数
1
解决办法
763
查看次数

MVC 3区域注册和视图无效

我似乎遇到了命名空间或注册问题.在这一点上,我更倾向于使用MVC 3.0的区域和注册问题,但我对这里的任何想法持开放态度.

我的CAPAreaRegistration.cs文件看起来像这样:

  namespace CISE.CINet.UserInterface.Areas.CAP
{
    public class CAPAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "CAP";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "CAP_default",
                "CAP/{controller}/{action}/{id}",
                new { action = "NewNomination", id = UrlParameter.Optional }
            );
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试添加命名空间我改变了一切:

  public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "CAP_default",
                "CAP/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }, new string[] { "CISE.CINet.UserInterface.Areas.CAP.Controllers" }  // specify the new namespace 
            );
        }
Run Code Online (Sandbox Code Playgroud)

Global.asax看起来像这样:

    namespace CISE.CINet.UserInterface
{ …
Run Code Online (Sandbox Code Playgroud)

c# controller registration asp.net-mvc-areas asp.net-mvc-3

2
推荐指数
1
解决办法
5496
查看次数

如何在MVC3的自定义路由处理程序中指定命名空间?

我写了一个自定义路由处理程序.因为我的网站中的区域中存在冲突的控制器名称,所以我收到错误:找到了多个匹配控制器命名的类型...

我想我需要在我的处理程序中指定一个命名空间,对吧?

我尝试了以下,没有一个工作:

public class MyRouteHandler : MvcRouteHandler
{
    protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
    {

        (... complicated DB lookups and "re-writing" of requestContext.RouteData.Values["controller"] ...)

        // doesn't work
        requestContext.RouteData.Values["namespaces"] = new[] { "Site.Contollers" };

        // doesn't work
        requestContext.RouteData.DataTokens.Add("namespaces", new[] { "Site.Contollers" });

        // doesn't work
        requestContext.RouteData.Values["namespaces"] = "Site.Contollers";

        // doesn't work
        requestContext.RouteData.DataTokens.Add("namespaces", "Site.Contollers");

        (... snip ...)

        return base.GetHttpHandler(requestContext);
    }
}
Run Code Online (Sandbox Code Playgroud)

什么是正确的方法?

注意:因为我的处理程序执行数据库查找并根据结果选择不同的控制器,所以我不能在我的Global.asax.cs文件中使用基本的MapRoute()方法(据我所知).

asp.net-mvc namespaces mvcroutehandler asp.net-mvc-routing asp.net-mvc-areas

2
推荐指数
1
解决办法
3695
查看次数