-1

我有一个 MVC3 应用程序,我想在其中修改路由,如下所示:

public class DealsController : Controller
{
    public ActionResult View()
    {
        return View();
    }

    [Authorize]
    [HttpPost]
    public ActionResult Add(DealViewModel newDeal)
    {
        // Code to add the deal to the db
    }
}

我想做的是当用户请求www.domain.com/deals/view时,我想将 url 重写为www.doamin.com/unsecure/deals/view。因此,任何没有 Authorize 属性的路由都需要通过添加单词 unsecure 来修改。

注意:我的应用程序中有几个控制器,因此我正在寻找一种可以以通用方式处理此问题的解决方案。

4

4 回答 4

0

使用 2 个独立的控制器:

public class UnsecureDealsController : Controller
{
    public ActionResult View()
    {
        return View();
    }
}

public class SecureDealsController : Controller
{
    [HttpPost]
    [Authorize]
    public ActionResult Add(DealViewModel newDeal)
    {
        // Code to add the deal to the db
    }

    public ActionResult View()
    {
        return RedirectToAction("View", "UnsecureDeals");
    }
}

然后像这样路由:

routes.MapRoute(null, 
    "unsecure/deals/{action}/{id}",
    new
    {
        controller = "UnsecureDeals",
        action = "Index", 
        id = UrlParameter.Optional
    }); 

routes.MapRoute(null, 
    "deals/{action}/{id}",
    new
    {
        controller = "SecureDeals",
        action = "Index", 
        id = UrlParameter.Optional
    });

// the other routes come BEFORE the default route
routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
于 2012-07-25T12:29:53.227 回答
0

如果允许从此类 url 执行控制器,则映射到到一个 DealsController 的路由并使用 RedirectToAction。

于 2012-07-25T12:20:09.863 回答
0

请为此使用 RedirectToAction

例子 :

return RedirectToAction( new RouteValueDictionary( 
    new { controller = "unsecure/deals", action = "view" } ) );
于 2012-07-25T12:21:21.577 回答
0

如果您想要自定义路线,请执行以下操作:

routes.MapRoute(
            "unsecure", // Route name
            "unsecure/{controller}/{action}/{id}"
        );

请务必在默认地图之前添加它

那应该工作。我没有测试它。

于 2012-07-25T12:27:22.090 回答