2016-08-26 8 views
1

ウェブサイトを再構築する必要があります(古いものは古典的なASPを使用していますが、今はMVC 4にしたい)、URLを変更したくありません。たとえば、検索画面のURLがblabla.com/search.aspの場合、このようにしておくとよいでしょう。しかしmvcでは "search.asp"のようなURLを作ることはできません。私はこのようなURLを保持したいが、検索ビューをレンダリングする。私はこれを一つずつ行う必要があるのでしょうか、それとも動的な方法がありますか?例"home.asp"のようなURLはmvcでリダイレクトされます

requested url = "blabla.com/string variable" 
if variable.Substring(variable.Length - 4) == ".asp"; 
return View("variable.Substring(0, (variable.Length - 4))") 

:構文は、私が知っている、すべて間違っています。私はちょうど条件を説明しようとしました..

注2:彼らは "SEO"のもののためにこれが欲しいです。彼らは格付けを失いたくはありません。 googleのために何も変わらないどんな方法でも、彼らは私が推測するその方法を受け入れます。

+0

リダイレクトを受け入れますか? IISリライトルールを使用して、古いバージョンから新しいバージョンへの要求を変更できます。 – ADyson

+0

"MVC 4.5"のようなものはありません。 ASP.NET MVCはライブラリであり、.NETとASP.NETとは別にバージョン管理されています。 – mason

+0

彼らは "SEO"のためにこれが欲しいです。彼らは格付けを失いたくはありません。それがGoogleのために何も変わらなければ、彼らは私が推測する方法を受け入れるだろう。どう思いますか? – crowz

答えて

3

あなたには2つのものが必要です。

  1. (* .aspファイル
  2. *の.asp

のためのハンドラを追加しますRouteConfig

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

    routes.MapRoute(
     name: "DefaultAsp", 
     url: "{controller}/{action}.asp/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 

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

ハンドラ(のWebConfig)ため

をルートを定義しますこれはまた、あなたは別のビューを呼び出すアンカーを持っている場合、そのビューはと通常のMVC URLを持っていることを意味した.aspで利用可能なMVCで構築されたすべてのURLのを、作っているこれを行う/system.webServer/handlers

<add name="AspFileHandler" path="*.asp" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 

の内部に挿入すること。 aspサフィックス。

これは一般的なものであり、あなたは一度だけ、この行を追加する必要があります。 Home/Indexはデフォルトのコントローラとアクションだけです。

注2

ハンドラを説明するために忘れました。

IISは、そのページにアクセスしようとしているASPファイルが存在しないため、エラーを返すように要求していると思うので、必要です。

このハンドラを使用すると、アプリケーションでこれらのページ自体を処理できるようになります。

+0

あなたは命を救っています。これは素晴らしい作品です。ありがとうございます。 – crowz

+0

これは、w私たちはハンドラで 'GET'を指定しているだけなので、GETのアクションはありません。 POSTが必要な場合は、 'GET、POST'に変更してください –

1

MVCは、拡張子を含む、特定のコントローラにそれを指し示すルート記述することができません:あなたのTestController.csで、

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapRoute("Test", "test.asp", new {controller = "Test", action = "test" }); 
} 

その後:RouteConfig.csで

public class TestController : Controller 
{ 
    public ActionResult Test() 
    { 
     var obj = new Foo(); 
     //Do some processing 
     return View(obj); 
    } 
} 

このようにして、http://www.foo.com/test.aspに問題なくアクセスし、お客様のクライアントに必要なものを.aspで維持することができます。

+0

FabioはLeandroのソリューションに非常に近いですが、もっとダイナミックにする必要がありますので、私はLeandroの答えを検証しました。しかし、ありがとうございます。 – crowz

関連する問題