1

URL にリダイレクトするルートを作成しようとしていますが、私の人生では機能しません。これが私がこれまでに持っているものです:

public class GoAreaRegistration : AreaRegistration
{
    public override string AreaName
    {
        get
        {
            return "Go";
        }
    }

    public override void RegisterArea( AreaRegistrationContext context )
    {
        context.MapRoute(
            "Go/Issues",
            "go/issues/{issueID}",
            new { controller = "Go", action = "GoIssues" },
            new { issueID = @"\d+" }
        );
    }
}

そして私のコントローラー:

public class GoController : Controller
{
    public ActionResult GoIssues( int issueID )
    {
      var version = getVersion( issueID );
      if( version != null )
      {
        string url = MakeUrl(version, issueID);

        // Redirect to the right url
        return Redirect( url );
      }
    }

    // not found
    return HttpNotFound();
  }
}

これの要点は、リダイレクトする正しいバージョンを決定し、そこにリダイレクトすることです。しかし、何らかの理由で go/issues/123 に 404 not found が表示されます。ルート デバッグ ツールを使用したところ、このルートがヒットしたことが示されましたが、無効にすると 404 に戻りました。

どんな助けでも大歓迎です。

ありがとう

4

2 に答える 2

1

エリア登録の代わりにグローバル ルート構成にルートを入れてみて、動作するかどうかを確認してください。

テスト プロジェクトであなたの構成を使用してみましたが、問題なく動作しています。それでもうまくいかない場合は、小さく始めてうまくいくようにしてから、壊れるまでゆっくりとルート構成を追加することをお勧めします。

于 2012-12-05T07:37:22.270 に答える
0

他の誰かが同じ問題を抱えている場合、私は答えを見つけました。

グーグルでよく調べた結果、ルーティングの仕組みを説明している次の記事を見つけました。

http://blog.davebouwman.com/2011/12/08/asp-net-mvc3-and-404s-for-area-controllers/

この記事では、ASP.NET は名前空間が特定の形式であることを期待していると述べています。

問題は、コントローラーの名前空間でした。MVC には、領域名がコントローラーの名前空間にあることが期待されるという規則があることがわかりました。

つまり、私は StatsMe.API.CategoriesController を持っていましたが、MVC は StatsMe.Areas.API.CategoriesController を探していました。

最終的にわかったのは、RouteDebugger の出力にあるものでした…</p>

非常に一般的なメッセージが吐き出されるのではなく、「ねえ – StatsMe.Areas.API.CategoriesController を探していますが、見つかりません」というエラー メッセージが実際に役立つ可能性があるため、迷惑です。

于 2012-12-06T02:32:13.840 に答える