1

我在 SharePoint 网站的虚拟目录中有一个 ASP.NET 4 应用程序。这是一个独立的应用程序,在它自己的应用程序池中,所以我不认为 SP 是问题,但是?aspx 页面工作正常,但对 ApiController 的请求返回 401 错误:访问被拒绝。

<html><head><title>Error</title></head><body>Error: Access is Denied.</body></html>

事件查看器没有任何内容,IIS 日志显示 401 2 2148074254 然后 401 1 0 然后 200 0 0 然后 401 1 2148074248。我知道最后一个 401.1 看起来像我的错误,但我已经多次确认它是请求的最后一个日志条目。与 IE8、Chrome、FireFox 一致。

Fiddler 仅显示 401,“WWW-Authenticate: NTLM”与“WWW-Authenticate: NTLM TlRMblah_blah_blah ...”和上面的 HTML 交替显示。

备用计划是放弃控制器并使用 .ashx,但希望 SO 可以提供帮助。

4

1 回答 1

0

找到解决方法,直到项目不再位于 SharePoint 中。保持 Controler 类 (PSSController) 原样,但添加了一个带有以下代码的 ashx 文件并更改了 javascript 以使用它。cntrl 只是我的课;您的 QueryString 和 Post 参数会有所不同。有点hacky,但它有效:)

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.SessionState;
using Newtonsoft.Json;

namespace PipWebApp
{
    public partial class PSSurvey2API : IHttpHandler, IRequiresSessionState
    {
        public void ProcessRequest(HttpContext context)
        {
            String InputString = null;
            using (var sr = new System.IO.StreamReader(context.Request.InputStream))
                InputString = sr.ReadToEnd();
            List<PSSurvey.cntrl> cntrls = (List<PSSurvey.cntrl>)JsonConvert.DeserializeObject(InputString, typeof(List<PSSurvey.cntrl>));
            String Params = context.Request.QueryString["Params"];


        Controllers.PSSController APICon = new Controllers.PSSController();

        if (context.Request.QueryString["Rpt"] == null)
            context.Response.Write(JsonConvert.SerializeObject(APICon.Post(cntrls, Params)));
        else
            context.Response.Write(JsonConvert.SerializeObject(APICon.Post(cntrls, context.Request.QueryString["Rpt"], Params)));
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

}

于 2012-09-06T20:43:45.140 回答