URL上的MVC凭据

问题描述 投票:0回答:2

使用MVC,在控制器中,我将如何传递凭证值?不将凭据作为查询参数放置

// http://user1:pass1@localhost:80/GetData?Branch=1
public ActionResult GetPDF(int Branch) {
    // how will i get user1 as username, and pass1 as password?
}

谢谢

c# asp.net-mvc-4 url
2个回答
1
投票

发出一个Post请求,并在ajax请求的标题中提及您的参数,也可以编码/加密。

大于jQuery 1.5,你可以$ .ajaxsetup来全局设置标题。

 $.ajax({  
url: 'url',  
type: "POST",  
contentType: "application/json",  
data: JSON.stringify(Data),  
dataType: "json",  
headers: { 'Authorization' :'Basic ' + Encode(username + ':' + password) },  
success: function (result) {  

},  
error: function (err) {  
    alert(err.statusText);  
}  });  

然后进入控制器,将授权过滤器解密并分离凭证。

如果您想通过控制器操作访问它,您可以执行类似的操作。

var re = Request;
var headers = re.Headers;

if (headers.Contains("Username"))
{
    string token = headers.GetValues("Username").First();
}

 public class BasicAuthenticationAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
if (actionContext.Request.Headers.Authorization == null)
{
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
}
else
{
// Gets header parameters
string authenticationString = actionContext.Request.Headers.Authorization.Parameter; string originalString = Encoding.UTF8.GetString(Convert.FromBase64String(authenticationString)); // Gets username and password string usrename = originalString.Split(':')[0]; string password = originalString.Split(':')[1]; // Validate username and password if (!ApiSecurity.VaidateUser(usrename, password)) { // returns unauthorized error actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized); } } base.OnAuthorization(actionContext); } }

这样,您可以授权和验证凭据,而无需传递给数据或URL字符串。


0
投票

使用POST请求,以便可以通过请求标头发送凭据

© www.soinside.com 2019 - 2024. All rights reserved.