2012-06-27 72 views
0

控制器:Asp.Net Mvc網址路由到登錄頁面?

public class HomeController : Controller 
{ 
    Models.MakaleSitesiDBEntities entity = new Models.MakaleSitesiDBEntities(); 

    public ActionResult ArticlesByCategory(int CategoryId) 
    { 
     IEnumerable<Models.TableArticles> articles = entity.TableArticles.Where(a => a.CategoryId == CategoryId && a.IsActive == true).OrderBy(a => a.PublishedOn); 

     return View(articles.Reverse()); 
    } 

    public ActionResult ArticleDetails(Guid ArticleId) 
    { 
     if (Session["IsUserRead"] == null || (Guid)Session["IsUserRead"] != ArticleId) 
     { 
      Session["IsUserRead"] = ArticleId; 
      Models.TableArticles article = entity.TableArticles.Where(a => a.ArticleId == ArticleId).SingleOrDefault(); 
      article.ViewCount++; 
      entity.SaveChanges(); 
     } 

     return View(entity.TableArticles.Where(a => a.ArticleId == ArticleId).SingleOrDefault()); 
    } 
} 

ArticlesByCategory允許匿名用戶,但不ArticleDetails。它將頁面路由到登錄頁面?

Global.asax的

using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Data.Entity; 
using System.Data.Entity.Infrastructure; 
using System.Linq; 
using System.Web; 
using System.Web.Http; 
using System.Web.Mvc; 
using System.Web.Optimization; 
using System.Web.Routing; 

namespace MakaleSitesi 
{ 
// Note: For instructions on enabling IIS6 or IIS7 classic mode, 
// visit http://go.microsoft.com/?LinkId=9394801 

public class MvcApplication : System.Web.HttpApplication 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorAttribute()); 
    } 

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

     routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

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

    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     // Use LocalDB for Entity Framework by default 
     Database.DefaultConnectionFactory = new SqlConnectionFactory("Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True"); 

     RegisterGlobalFilters(GlobalFilters.Filters); 
     RegisterRoutes(RouteTable.Routes); 

     BundleTable.Bundles.RegisterTemplateBundles(); 
    } 
} 
} 

爲什麼發生這種情況?

+0

你需要(通常的global.asax.cs)發表您的路由代碼。 – Nik

+1

請在Global.asax中顯示完整的路由設置以及您在瀏覽器地址欄中輸入的URL以訪問此操作。我懷疑這個請求被路由到了一些其他控制器動作,這些控制動作是用Authorize屬性裝飾的,而不是「ArticleDetails」動作。 –

回答

2

此行爲的一種可能的解釋是該請求正在觸發某些其他控制器操作,該操作使用[Authorize]屬性修飾,而不是ArticleDetails操作。這可能會發生,因爲您可能已經完成的一些自定義路由設置無法按預期工作。

另一個可能的解釋是,您在IIS中有一些配置,或者您使用的任何Web服務器拒絕匿名訪問給定的URL。

+0

它昨天工作。我修改了myproject並將其重新加載到服務器。現在它不起作用。 (我沒有發佈將它加載到服務器) –

+0

我添加了Global.asax請幫我解決這個問題。 –

+0

我修好了。有一個部分視圖是用auth裝飾的。 ATTR。我將其更改爲AllowAnonymous。 –

0

最有可能在Web.config中的認證或授權部分的設置,下面會產生這種行爲:

<system.web> 
    <authentication mode="Forms"> 
    <forms loginUrl="~/Login/Index" defaultUrl="/Home" timeout="60" /> 
    </authentication> 
    <authorization> 
    <deny users="?" /> 
    </authorization> 
</system.web> 

<location path="home/ArticlesByCategory"> 
    <system.web> 
    <authorization> 
     <allow users="*" /> 
    </authorization> 
    </system.web> 
</location>