任何人都知道这是如何工作的,我正在使用.net成员资格提供者,只想拉一个xml列表.我也使用.net mvc sdk.所以这里的问题,当我添加[WebApiEnabled]在我的控制器的顶部我可以成功地拉xml / json.但是当我将[Authenticate]添加到我的控制器顶部时,我无法登录.作为示例curl -i“admin:pass”-H“Accept:application / xml”
http://localhost:xxxx/Book
在此先感谢您的帮助
解决方法
好吧,所以我想出来,但解决方案可能是一个贫民窟.我从.net mvc源中获取了AuthorizeAttribute,并重新编写了OnAutorization方法.这绝对适用于我,但它只适用于基本身份验证,我不知道这是否是最安全的使用方法.然而,它确实解决了Web客户端能够访问安全的.net mvc休息服务的问题.
public virtual void OnAuthorization(AuthorizationContext filterContext) { if (filterContext == null) { throw new ArgumentNullException("filterContext"); } string auth = filterContext.HttpContext.Request.Headers["authorization"]; if (!String.IsNullOrEmpty(auth)) { byte[] encodedDataAsBytes = Convert.FromBase64String(auth.Replace("Basic ","")); string val = Encoding.ASCII.GetString(encodedDataAsBytes); string userpass = val; string user = userpass.Substring(0,userpass.IndexOf(':')); string pass = userpass.Substring(userpass.IndexOf(':') + 1); if (!System.Web.Security.Membership.Provider.ValidateUser(user,pass)) { filterContext.Result = new HttpUnauthorizedResult(); } } else { if (AuthorizeCore(filterContext.HttpContext)) { HttpCachePolicyBase cachePolicy = filterContext.HttpContext.Response.Cache; cachePolicy.SetProxyMaxAge(new TimeSpan(0)); cachePolicy.AddValidationCallback(CacheValidateHandler,null /* data */); } else { // auth Failed,redirect to login page filterContext.Result = new HttpUnauthorizedResult(); } } }