我能夠在我的開發機器上運行我的應用程序,但只要我將它發佈到Web服務器,一些功能就會丟失。任何類型的.ajax POST通常不會有401未經授權的錯誤。MVC應用程序不能在服務器上運行,但在開發機器上運行良好
服務器是Windows 2008與IIS7。我還在服務器上安裝了MVC2的Visual Studio 2008,並直接在服務器上運行應用程序,並且相同的.ajax POST不起作用,但錯誤更改爲500未知。
感謝您的幫助。
我能夠在我的開發機器上運行我的應用程序,但只要我將它發佈到Web服務器,一些功能就會丟失。任何類型的.ajax POST通常不會有401未經授權的錯誤。MVC應用程序不能在服務器上運行,但在開發機器上運行良好
服務器是Windows 2008與IIS7。我還在服務器上安裝了MVC2的Visual Studio 2008,並直接在服務器上運行應用程序,並且相同的.ajax POST不起作用,但錯誤更改爲500未知。
感謝您的幫助。
如果你正在使用jQuery,你確定你正在請求與你的應用程序位於同一個域的數據嗎?如果不存在這個jQuery Forum post:
是的,他們都在同一個域名。 – 2010-04-14 17:45:06
的解決方法,我認爲你需要一個自定義的ASP.NET MVC授權屬性對於Ajax請求
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext.Result == null || (filterContext.Result.GetType() != typeof(HttpUnauthorizedResult)
|| !filterContext.HttpContext.Request.IsAjaxRequest()))
return;
var redirectToUrl = "/login?returnUrl=" + filterContext.HttpContext.Request.UrlReferrer.PathAndQuery;
filterContext.Result = filterContext.HttpContext.Request.ContentType == "application/json"
? (ActionResult)
new JsonResult
{
Data = new { RedirectTo = redirectToUrl },
ContentEncoding = System.Text.Encoding.UTF8,
JsonRequestBehavior = JsonRequestBehavior.DenyGet
}
: new ContentResult
{
Content = redirectToUrl,
ContentEncoding = System.Text.Encoding.UTF8,
ContentType = "text/html"
};
//Important: Cannot set 401 as asp.net intercepts and returns login page
//so instead set 530 User access denied
filterContext.HttpContext.Response.StatusCode = 530; //User Access Denied
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;
}
}
謝謝你我在哪裏放置這個類 – 2010-04-14 17:58:19
如果你沒有授權過濾器,你不需要爲它們設置一個特殊的Ajax過濾器。您是否使用授權過濾器來裝飾控制器或動作? – 2010-04-14 20:09:23
我曾經有過這個問題。當您致電您的ajax服務時,請務必使用相關網址。
www.mysite.com/myservice
是不一樣
mysite.com/myservice
從
www.mysite.com
所以打電話時,調用該服務時,你應該用的是:
/myservice
答:看起來我發現我的問題。
在我的控制器,我有以下方法:
[JsonFilter(Param = "course", JsonDataType = typeof(EmployeeSearchItem))]
public ActionResult ViewCourseByID(EmployeeSearchItem course)
{
...}
而且EmployeeSearchItem是在自己的.cs文件中的類:
namespace EducationAssistanceMVC.Models
{
public class EmployeeSearchItem //: Controller
{
public string empIDSearch { get; set; }
... }
我的解決方案是在EmployeeSearchItem.cs文件中註釋掉上述Controller的繼承並且還註釋掉任何Using
指令。
哇,我不敢相信花了這麼長時間才弄清楚。
如果您通過在瀏覽器中輸入url來調用期望進行ajax調用的URL,您會得到什麼? – 2010-04-14 20:07:10