使用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?
}
谢谢
发出一个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字符串。
使用POST请求,以便可以通过请求标头发送凭据