我在SharePoint网站的虚拟目录中有一个ASP.NET 4应用程序。这是一个自己的应用程序池中的自包含应用程序,所以我不认为SP是问题但是? aspx页面工作正常,但是对ApiController的请求返回401错误:Access是Deniend。
<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可以提供帮助。
答案 0 :(得分:0)
找到解决方法,直到项目不再在SharePoint中。保持Controler类(PSSController)原样,但添加了一个带有以下代码的ashx文件,并更改了javascript以使用它。 cntrl只是我的班级;你的QueryString和Post params会有所不同。有点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;
}
}
}
}