新项目无法找到新区域的视图.
它试图在父视图文件夹中找到它.
建议的解决方案是.DataTokens.Add("area", "AREANAME")将该RegisterArea方法付诸实践.
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Test_default",
"Test/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
).DataTokens.Add("area", "Test");
}
Run Code Online (Sandbox Code Playgroud)
但是,有了这个,我得到一个" 已添加相同密钥的项目. "错误.
更新1:我没有对控制器做任何想象.
public ActionResult Index()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
更新2:我只想补充一点,我也在将组件注册到Unity容器中.但是,我不认为这会导致问题,因为它明确指出没有必要注册我的控制器.
我有一个 WebAPI 项目,并且按照以下步骤启用了 CORS:
Install-Package Microsoft.AspNet.WebApi.Cors.config.EnableCors();到 WebApiConfig.cs。[EnableCors(origins: "*", headers: "*", methods: "*")]到我的控制器。我的控制器位于根控制器文件夹中,并且位于区域内。
/Controllers/ValuesController
/Areas/TestArea/Controllers/OtherStuffController
Run Code Online (Sandbox Code Playgroud)
两个控制器都有该[EnableCors(...)]属性。
我的问题是这只ValuesController有效。
使用 Fiddler 检查请求,OtherStuffController我可以看到客户端发送了预检 OPTIONS 请求,但服务器响应为 404 not find 而不是 200 OK,但工作ValuesController正常。
我究竟做错了什么?为什么 TestArea 区域中的控制器不能处理 CORS 请求,而 Values 控制器却可以?
除了名称之外,这两个控制器没有任何不同,而且它们位于一个区域中。
附加信息
路线:
// In WebApiConfig.cs
config.Routes.MapHttpRoute("DefaultApi", "{controller}/{id}",
new {id = RouteParameter.Optional} );
// In Areas/TestArea/TestAreaAreaRegistration.cs
context.MapRoute("TestArea_default","TestArea/{controller}/{id}",
new {id = UrlParameter.Optional});
Run Code Online (Sandbox Code Playgroud)
我用来访问操作方法的 URL:
http://localhxst:57578/values
http://localhxst:57578/testarea/otherstuff
Run Code Online (Sandbox Code Playgroud)
价值观要求(工作):
(REQUEST) …Run Code Online (Sandbox Code Playgroud) 我有一个ASP.NET MVC5网站,将分为公共和管理部分.
公共端具有可选身份验证,某些视图仅限于具有相应角色的经过身份验证的用户.如果用户在未经授权或没有相应角色的情况下尝试访问公共控制器,我希望将其重定向到"公共"登录页面.
只需一个简单的属性,它就可以正常工作:
[Authorize(Roles = "Organizer")]
但是,如果用户尝试访问管理区域中的任何内容,如果他们未经过身份验证,或者经过身份验证但没有"管理员"角色,那么我希望将他们重定向到其他登录屏幕.(https:// localhost:44300 /管理员/帐户/登录而不是https:// localhost:44300 /帐户/登录).
是否有一种简单的方法可以为整个区域应用备用登录重定向?
我最近更新了Visual Studio forUpdate 3和ASP.Net Core for 1.0.0。
我按照文档中的教程进行操作,并尝试设置使用像这样的区域https://docs.asp.net/en/1.0.0/mvc/controllers/areas.html
但是,生成的链接是http://localhost:2187/?area=Admin,而不是http://localhost:2187/Admin/Home/Index
更新
我的路线:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(
name: "areaRoute",
template: "{area}/{controller=Home}/{action=Index}");
});
Run Code Online (Sandbox Code Playgroud)
怎么了?
解决方案
问题在于答案中提到的路线顺序。
目前,我使用 VS2019 创建了一个 ASP.NET Core Web 应用程序,发现上下文菜单中缺少“添加区域”选项。
我尝试了这个解决方案并添加新的脚手架项目,但下面的窗口中没有 MVC Area 选项:
asp.net asp.net-mvc asp.net-mvc-areas asp.net-core visual-studio-2019
我正在使用带有MySQL的asp.net mvc开发一个网站,我需要为用户更新网站中的一些信息创建一个简单的限制区域.所以,我在mvc应用程序中创建了一个名为"Admin"的区域,我知道如何使用Forms身份验证和Autorize属性来保护它!它工作正常,但在我的区域的每个控制器中,我必须设置Autorize属性以保护它们.有没有办法保护Web.config中的所有区域?我怎样才能做到这一点?
谢谢
干杯
security asp.net-mvc forms-authentication roles asp.net-mvc-areas
过去几天我一直在网上寻找解决方案,而且我找不到多少.希望我没有使用正确的术语,这是一件容易的事情.
我想使用如下路径:
/{projectId}
Run Code Online (Sandbox Code Playgroud)
并且在生命周期的早期某处可以访问路径值字典,我可以查询数据库或会话对象以获取用于此请求的控制器名称.然后,能够指定要使用的控制器, route.Values["controller"] = controllerName;并通过该控制器与请求参数的所有爵士乐等进行请求.
可能吗?
我目前正在使用区域,并且有以下路径:
/ProjectType1/{projectId}
/ProjectType2/{projectId}
Run Code Online (Sandbox Code Playgroud)
但是我觉得处理所有人的领域Html.Link并且讨厌为每个项目类型定义新区域真的很头疼.我很想找到更有活力的东西.
model-view-controller asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas
我有生成链接的问题我有一个名为"管理"的区域,它还有一个HomeController作为根,在主页
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("Admin", "Index", "Home", new {area = "Administration"})</li>
Run Code Online (Sandbox Code Playgroud)
此外,我继承了From Route,方法GetVirtualPath接受省略区域键的参数值,并仅传递控制器和操作.
我哪里做错了?
asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas asp.net-mvc-4
我有一个应用程序,我已将我的管理面板移动到区域,从那时起我无法点击adminpanel api调用.这是主api注册和管理面板api注册的代码.
//Api registration
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "Secondary",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
//Area Registration
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_panel",
"AdminPanel/{controller}/{action}/{id}",
new { controller = "Admin", action = "Index", id = UrlParameter.Optional }
);
context.Routes.MapHttpRoute(
"Admin_Secondary",
"AdminPanel/api/{controller}/{id}",
new { id = RouteParameter.Optional }
);
}
Run Code Online (Sandbox Code Playgroud)
我试图用URL localhost/taw/adminpanel/api/SearchAPI来打它但它不起作用.我的路由有什么问题?
asp.net asp.net-mvc-routing asp.net-mvc-areas asp.net-web-api
我有一个MVC4网络应用程序,并创建了2个区域.我看不出如何为它们使用不同的布局.当我创建区域时没有为它们生成共享文件夹时,我尝试在名为BO的区域中创建一个并在那里复制_layout.cshtml文件,没有运气.在那里复制_viewstart.cshtml文件,
重命名_layout.cshtml并将BO区域的_viewstart.cshtml中的布局调用更改为
Layout = ~/Areas/BO/Shared/Views/_BOLayout.cshtml";
Run Code Online (Sandbox Code Playgroud)
仍然没有运气,当我导航到BO区域主页时,布局和css&JS文件都没有加载.制作区域的很多东西都使用了根_layout.cshtml,但我找不到很多关于每个区域使用不同的东西.有什么建议吗?
PS.上面的(在那里复制了_viewstart.cshtml文件)也破坏了一些东西; 我得到:类型'ASP._Page_Areas_BO__ViewStart_cshtml'不从'System.Web.WebPages.StartPage'继承.导航到该区域时出错.
我有一个视图,它有两个提交按钮(保存和关闭,保存和新).
<span>
<input type="button" value="Save&New" name="Save&New" id="SaveNew" />
</span>
<span>
<input type="button" value="Save&Close" name="Save&Close" id="SaveClose" />
</span>
<span>
Run Code Online (Sandbox Code Playgroud)
当我点击这些按钮中的任何一个时,模型数据将进入控制器并点击后期操作
[HttpPost]
public ActionResult Company(MyProject.Models.Company company)
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
现在我的公司对象有完整的模型数据(例如company.phonenumber,company.state等).现在我想识别用户点击按钮的ID(保存和新建或保存和关闭).两个按钮点击导致相同的ActionResult(公司),我只想确定从哪个按钮点击请求来.不能使用@ Html.ActionLink而不是input type = submit.需要使用Jquery知道Id.
我在一个区域托管了一个 API 控制器。但是,路由似乎不起作用,因为我的 ajax 调用在尝试点击控制器操作时不断返回 404。控制器构造函数中的断点永远不会被击中。
[Area("WorldBuilder")]
[Route("api/[controller]")]
[ApiController]
public class WorldApiController : ControllerBase
{
IWorldService _worldService;
IUserRepository _userRepository;
public WorldApiController(IWorldService worldService, IUserRepository userRepository)
{
_worldService = worldService;
_userRepository = userRepository;
}
[HttpGet]
public ActionResult<WorldIndexViewModel> RegionSetSearch()
{
string searchTerm = null;
var userId = User.GetUserId();
WorldIndexViewModel model = new WorldIndexViewModel();
IEnumerable<UserModel> users = _userRepository.GetUsers();
UserModel defaultUser = new UserModel(new Microsoft.AspNetCore.Identity.IdentityUser("UNKNOWN"), new List<Claim>());
model.OwnedRegionSets = _worldService.GetOwnedRegionSets(userId, searchTerm);
var editableRegionSets = _worldService.GetEditableRegionSets(userId, searchTerm);
if (editableRegionSets != null)
{
model.EditableRegionSets = editableRegionSets.GroupBy(rs => …Run Code Online (Sandbox Code Playgroud) asp.net-mvc ×6
asp.net ×2
asp.net-core ×2
c# ×2
.net ×1
cors ×1
preflight ×1
redirect ×1
roles ×1
security ×1
tag-helpers ×1