Outdoor Asp Asp

Outdoor Asp Asp




⚡ 👉🏻👉🏻👉🏻 INFORMATION AVAILABLE CLICK HERE 👈🏻👈🏻👈🏻




















































ASP.NET Core MVC позволяет организовать приложение в виде областей, где каждая область представляет какой-то свой сегмент приложения. Например, одна область может отвечать за функции администрирования, другая - за управление учетными записями и т.д. И каждая область представляет собой мини-проект, имеет свою собственную структуру каталогов. Это позволяет разрабатывать и тестировать код для каждой области отдельно независимо от других областей.
Возьмем простой проект ASP.NET Core с MVC и добавим в него области. Как правило, области помещаются в отдельную папку. Поэтому добавим в проект новую папку, которую назовем Areas. Затем в эту папку добавим каталог под названием Store. То есть у нас будет область под названием Store.
И далее в папке Areas/Store создадим подкаталоги Controllers и Views. В итоге проект будет выглядеть так:
Затем в папку Controllers добавим новый контроллер HomeController:
namespace AreasApp.Areas.Store.Controllers
    public class HomeController : Controller
        public IActionResult Index()
Для ассоциации контроллера с определенной областью к этому контроллеру применяется атрибут Area, в который передается название области. Без этого атрибута контроллер не будет принадлежать области Store.
Далее в папку Areas/Store/Views добавим подкаталог Home - для представлений нового контроллера. И затем в этот подкаталог поместим представление Index.cshtml с одной строкой:
HomeController из области Store
Вообще поиск представления для контроллера из области ведется по следующим путям:
Соответственно все три выше указанные папки мы могли бы использовать для хранения представления Index.cshtml для контроллера из области Store.
Таким образом, проект теперь выглядит так:
Но пока эта область совершенно неактивна. Мы никак не можем к ней обратиться. И теперь добавим в приложение поддержку этой области. Для этого изменим класс Startup:
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
        public Startup(IConfiguration configuration)
            Configuration = configuration;
        public IConfiguration Configuration { get; }
        public void ConfigureServices(IServiceCollection services)
            services.AddControllersWithViews();
        public void Configure(IApplicationBuilder app)
            app.UseDeveloperExceptionPage();
            app.UseEndpoints(endpoints =>
                endpoints.MapControllerRoute(
                    name: "MyArea",
                  pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
Для сопоставления с областью в первом маршруте определен сегмент area. Ограничение exists используется для того, чтобы маршрут сопоставлялся только с теми областями, которые определены в приложении.
И теперь мы сможем обращаться к области с запросом http://localhost:xxxx/Store:
В данном случае определяется маршрут для всех областей. С помощью метода MapAreaControllerRoute() можно указать маршрут для конкретной области:
public void Configure(IApplicationBuilder app)
    app.UseDeveloperExceptionPage();
        // маршрут для области store
        endpoints.MapAreaControllerRoute(
            pattern: "store/{controller=Home}/{action=Index}/{id?}");
        endpoints.MapControllerRoute(
            pattern: "{controller=Home}/{action=Index}/{id?}");
Метод MapAreaControllerRoute() принимает три обязательных параметра: имя маршрута, имя области (areaName) и шаблон маршрута. Причем шаблон маршрута начинается с названия области: "store/{controller=Home}/{action=Index}/{id?}"
Подобным образом можно определить маршруты для нескольких областей:
    endpoints.MapAreaControllerRoute(
        pattern: "store/{controller=Home}/{action=Index}/{id?}");
    endpoints.MapAreaControllerRoute(
        pattern: "service/{controller=Home}/{action=Index}/{id?}");
        pattern: "{controller=Home}/{action=Index}/{id?}");
Несмотря на то, что в примере выше шаблон маршрута начинается с названия области и при обращении к методу контроллеру мы вводим в начале название области, в принципе это необязательно. Например, определим следующий маршрут:
    endpoints.MapAreaControllerRoute(
        pattern: "products/{controller=Home}/{action=Index}/{id?}");
        pattern: "{controller=Home}/{action=Index}/{id?}");
Теперь шаблон маршрута для области Store начинается с токена "products", однако параметр areaName по прежнему позволяет связать данный маршрут с областью Store. Только теперь в адресной строке нам придется вводить вначале "Products", а не "Store":
Подобным образом мы можем использовать области при маршрутизациии через RouterMiddleware и метод UseMvc:
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
        public void ConfigureServices(IServiceCollection services)
            services.AddControllersWithViews(op => op.EnableEndpointRouting = false);
        public void Configure(IApplicationBuilder app)
                    template: "{area:exists}/{controller=Home}/{action=Index}");
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
Определение маршрутов для конкретных областей:
        template: "Products/{controller=Home}/{action=Index}/{id?}");
        template: "{controller=Home}/{action=Index}/{id?}");
Также мы могли бы задать маршрут через атрибут маршрутизации, в котором параметр area представлял бы область:
public class HomeController : Controller
    [Route("[area]/[controller]/[action]")]
Для обращения к такому методу Index мы можем использовать три адреса: http://localhost:xxxx/Store, http://localhost:xxxx/Store/Home и http://localhost:xxxx/Store/Home/Index
В этом случае в классе Startup можно не определять маршрут для области:
        pattern: "{controller=Home}/{action=Index}/{id?}");
public class HomeController : Controller
    [Route("Products/[controller]")]
    [Route("Products/[controller]/[action]")]
Для обращения к такому методу Index мы можем использовать следующие адреса: http://localhost:xxxx/Products, http://localhost:xxxx/Products/Home и http://localhost:xxxx/Products/Home/Index
При работе с областями следует учитывать ряд моментов.
Если в контроллеры области используют представления, то система будет искать эти представления по следующим путям:
Поэтому все представления, которые находятся вне описанных выше путей, будут недоступны для области. К примеру, в главном проекте функциональность tag-хелперов добавляется с помощью файла _ViewImports.cshtml. В области он будет недоступен. И чтобы задействовать tag-хелперы в представлениях в области, нам надо добавить аналогичный файл в каталог Views, который находится в области. Либо же добавлять в представления области эту строку, где надо использовать tag-хелперы.
Другой важный момент - это генерация ссылок. При генерации ссылок в представлениях отдельных областей используются все те хелперы, например, Html.ActionLink или AncorTagHelper, однако тут есть и некоторые особенности.
Чтобы сгенерировать ссылку на какое-либо действие контроллера, которые находятся внутри области, то мы указываем действие и контроллер (если действие находится в другом контроллере):
@Html.ActionLink("Онлайн-магазин", "Index", "Home")
Онлайн-магазин
В итоге будет сгенерирована ссылка: Онлайн-магазин (если текущее представление расположено в области Store).
Если же требуемое действие и контроллер находятся в другой области, то мы указываем область в параметре хелпера:
@Html.ActionLink("Все книги", "List", new { area = "Store", controller = "Book" })
Все книги
Сгенерированная ссылка будет выглядеть так: Все книги
Если же метод и контроллер, на которые мы хотим сделать ссылку, находятся в основной части приложения, то для параметра area определяем пустую строку:
@Html.ActionLink("Главная", "Index", new { area = "", controller = "Home" })
Главная
Контакты для связи: metanit22@mail.ru
Copyright © metanit.com, 2012-2021. Все права защищены.

{
"/api/*": {
"target": "http://localhost:5000/",
"secure": false,
"logLevel": "debug"
}
}



{
{
"name": "project.angular",
"version": "0.0.0",
"license": "MIT",
"scripts": {
"ng": "ng",
"start": "ng serve --proxy-config proxy.config.json",
"build": "ng build --prod",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
"private": true,
"dependencies": {
"@angular/animations": "^5.2.0",
"@angular/common": "^5.2.0",
"@angular/compiler": "^5.2.0",
"@angular/core": "^5.2.0",
"@angular/forms": "^5.2.0",
"@angular/http": "^5.2.0",
"@angular/platform-browser": "^5.2.0",
"@angular/platform-browser-dynamic": "^5.2.0",
"@angular/router": "^5.2.0",
"core-js": "^2.4.1",
"rxjs": "^5.5.6",
"zone.js": "^0.8.19"
},
"devDependencies": {
"@angular/cli": "1.6.7",
"@angular/compiler-cli": "^5.2.0",
"@angular/language-service": "^5.2.0",
"@types/jasmine": "~2.8.3",
"@types/jasminewd2": "~2.0.2",
"@types/node": "~6.0.60",
"codelyzer": "^4.0.1",
"jasmine-core": "~2.8.0",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~2.0.0",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "^1.2.1",
"karma-jasmine": "~1.1.0",
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "~5.1.2",
"ts-node": "~4.1.0",
"tslint": "~5.9.1",
"typescript": "~2.5.3"
}
}
}



{
{
"name": "project.angular",
"version": "0.0.0",
"license": "MIT",
"scripts": {
"ng": "ng",
"start": "ng serve --proxy-config proxy.config.json",
"build": "ng build --prod --output-path ../Project.WebApi/wwwroot",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
"private": true,
"dependencies": {
"@angular/animations": "^5.2.0",
"@angular/common": "^5.2.0",
"@angular/compiler": "^5.2.0",
"@angular/core": "^5.2.0",
"@angular/forms": "^5.2.0",
"@angular/http": "^5.2.0",
"@angular/platform-browser": "^5.2.0",
"@angular/platform-browser-dynamic": "^5.2.0",
"@angular/router": "^5.2.0",
"core-js": "^2.4.1",
"rxjs": "^5.5.6",
"zone.js": "^0.8.19"
},
"devDependencies": {
"@angular/cli": "1.6.7",
"@angular/compiler-cli": "^5.2.0",
"@angular/language-service": "^5.2.0",
"@types/jasmine": "~2.8.3",
"@types/jasminewd2": "~2.0.2",
"@types/node": "~6.0.60",
"codelyzer": "^4.0.1",
"jasmine-core": "~2.8.0",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~2.0.0",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "^1.2.1",
"karma-jasmine": "~1.1.0",
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "~5.1.2",
"ts-node": "~4.1.0",
"tslint": "~5.9.1",
"typescript": "~2.5.3"
}
}
}



public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseDefaultFiles();
app.UseStaticFiles();

app.UseMvc();
}



public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.UseDefaultFiles();
app.UseStaticFiles();

app.UseCors(builder => builder.WithOrigins("http://localhost:4200"));

app.UseMvc();
}



public void ConfigureServices(IServiceCollection services)
{
services.AddCors();

services.AddMvc();
}



Присылаем лучшие статьи раз в месяц
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Female Ass
Www Xnxx Sex
British Orgasm
Mature 30
Roberto Im Gonzo
Outdoor Tactical | ASP
Active Server Pages — Википедия
ASP.NET Core | Области
Краткое руководство: связываем ASP.NET Core We…
ASP.NET Core | Загрузка файлов на сервер
Путь ASP.NET Core [уровень 1] Основы / Хабр
Aspen Outdoors - Home | Facebook
Outdoor LED Screen Displays | Outdoor Digital Displays ...
Ruckus ZoneFlex Outdoor | NetWifiStore.com
Current New Inventory | Oak Hill Outdoor
Outdoor Asp Asp


Report Page