0

コントローラ:

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 は許可しません。ページをログインページにルーティングしますか?

グローバル.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();
    }
}
}

なぜこれが起こっているのですか?

4

2 に答える 2

2

[Authorize]この動作の考えられる説明の 1 つは、アクションではなく、属性で修飾された他のコントローラー アクションにリクエストがヒットしたことArticleDetailsです。これは、期待どおりに動作しないカスタム ルーティング セットアップが原因で発生する可能性があります。

別の考えられる説明は、IIS または使用している Web サーバーに、特定の URL への匿名アクセスを拒否する構成があることです。

于 2012-06-27T08:52:08.007 に答える
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>
于 2012-06-27T08:52:46.133 に答える