2016-06-20 2 views
1

Мне нужно обновить несколько статических веб-страниц, и я хотел бы воспользоваться этим временем, чтобы воссоздать их с помощью ASP.NET Core (ASP.NET 5 с MVC 6) в Visual Studio 2015. Я хочу перестроить его с использованием новейших технологий Microsoft, чтобы сделать изменения в будущем.Изменение основного маршрута ASP.NET

Когда я запускаю проект на локальном хосте, сайт по умолчанию загружается нормально, но любая из связанных страниц ломается, потому что они маршрутизируются на контроллер /Home по умолчанию. Кроме того, ни один из проектов jQuery, css или изображения найдены, когда MVC размещает эти страницы.

В файле Startup.cs, есть следующий метод:

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
    loggerFactory.AddDebug(); 

    if (env.IsDevelopment()) 
    { 
     app.UseDeveloperExceptionPage(); 
     app.UseDatabaseErrorPage(); 
     app.UseBrowserLink(); 
    } 
    else 
    { 
     app.UseExceptionHandler("/Home/Error"); 
    } 

    app.UseStaticFiles(); 

    app.UseIdentity(); 

    // Add external authentication middleware below. To configure them please see http://go.microsoft.com/fwlink/?LinkID=532715 

    app.UseMvc(routes => 
    { 
     routes.MapRoute(
      name: "default", 
      template: "{controller=Home}/{action=Index}/{id?}"); 
    }); 
} 

Это, как он настроен работать из коробки.

Наша компания не хочет, чтобы /Home (или что-то еще) застрял на URL всех своих веб-страниц.

Я создал различные IActionResult метод для разных страниц, но все они делают то же самое:

public IActionResult Index() 
{ 
    return View(); 
} 

У нас также есть компании, которые ссылаются на наш сайт. Изменение структуры наших страниц приведет к тому, что другие компании остановятся и внесут изменения.

Как бы взять строку, такую ​​как {controller}/{action}/{id?}, и вернуть это типичную ссылку, например action.aspx?id=x?

Альтернативно, есть ли способ сказать MVC не использовать шаблон для определенных страниц?

Прошу прощения, если это глупо базовый. Обычно я работаю над Windows Forms.

+0

Я не уверен, что является преимуществом вашего упражнения, когда вы не хотите использовать базовую инфраструктуру. Если MVC не то, что вы хотите, я бы посоветовал придерживаться того, что у вас есть. – Saleem

+1

@ Салим, с Microsoft становится все труднее, когда это не в MCV (в основном, в социальной интеграции). Если я никогда не начну изучать его части, я никогда не узнаю, как использовать его. – jp2code

ответ

1

Есть два решения:

Маршрут Шаблон:

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

Атрибут Маршруты

[HttpGet("")] 
public IActionResult Index() 
{ 
    return View(); 
} 

Вы можете создать новый проект с использованием ASP.NET MVC Boilerplate для полного рабочего примера с использованием этого метода.

+0

Как мне обрабатывать другие действия контроллера, например ** Контакты **, ** Новости ** и ** Продажи **? Как отредактировано выше, я получаю 'AmbiguousActionException: несколько действий, согласованных. ' – jp2code

+0

Я вижу это. Я использовал [Daniel's Answer] (http://stackoverflow.com/a/30964951/153923), чтобы дать каждому Action имя (т. Е. Contact.html, News.html, Sales.html). – jp2code

Смежные вопросы