asp.net MVC上的AuthorizeAttribute无法将日志写入文件

时间:2013-08-31 03:11:06

标签: asp.net asp.net-mvc authorization

我尝试在restful服务中自定义AuthorizeAttribute以进行身份​​验证。我想将信息写入日志文件。但它没有用。我在日志路径中看不到任何日志文件。 (我已启用IIS_USER权限)

另外,我甚至发现如果AuthorizeCore返回false,我的测试客户端仍然可以得到结果。在我的代码中某处错了吗?或者我误解了AuthorizeAttribute如何工作?

PS。我还发现如果我将日志部分切换到ApiController它会工作!这太奇怪了!

过滤

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        using (StreamWriter sw = new StreamWriter(@"C:\inetpub\wwwroot\mvctest\logs\Trace.log", true, Encoding.UTF8))
        {
            IEnumerable<String> header = httpContext.Request.Headers.GetValues("User");
            foreach (String str in header)
            {
                sw.WriteLine(str);
            }
            sw.Flush();
        }

        return base.AuthorizeCore(httpContext);
    }
}

ApiController

public class ValuesController : ApiController
{
    // GET api/values

    [MyAuthorizeAttribute]
    public List<String> Get()
    {
        return new List<String> { "Success", "Get" };
    }

    // GET api/values/5
    [MyAuthorizeAttribute]
    public String Get(int id)
    {   
        return "Success";
    }
}

TestClient的

static void Main(string[] args)
    {
        try
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost/mvctest/api/values/5");
            request.Headers.Add("User", "Darkurvivor");
            using (WebResponse response = request.GetResponse())
            using (StreamReader sr = new StreamReader(response.GetResponseStream()))
            {
                String data = sr.ReadToEnd();
                Console.WriteLine(data);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
        Console.ReadKey();
    }

1 个答案:

答案 0 :(得分:0)

有两个AuthorizeAttribute。一个用于WebApi,一个用于MVC。 Web Api使用System.Web.http.AuthorizeAttribute,而MVC使用System.Web.Mvc.AuthorizeAttribute。你不能使用另一个。所以不行。这根本不奇怪。