Если у Вас есть определенная проблема, Вы, вероятно, имеете определенное регулярное выражение в виду. Я взял бы то регулярное выражение, разработал бы то, что это означает в простых человеческих терминах, и работайте оттуда.
я подозреваю, что это возможно для создания общего regex случайного генератора соответствия, но это, вероятно, будет очень [еще 111] работа, чем просто обработка конкретного случая - даже если тот случай изменит несколько раз год.
(На самом деле, не может быть возможно генерировать случайные соответствия в самом общем смысле - у меня есть неопределенная память, что проблема "делает любое строковое соответствие, этот regex" является скрытой проблемой остановки. С очень сокращением regex язык у Вас может быть больше удачи все же.)
Ну, чтобы потребовать базовую аутентификацию, вам нужно вернуть код состояния 401. Но это приведет к тому, что текущий модуль аутентификации выполнит свой неавторизованный обработчик по умолчанию (для аутентификации с помощью форм это означает перенаправление на страницу входа).
Я написал ActionFilterAttribte
, чтобы узнать, смогу ли я добиться того же поведения, что и вы. когда не установлен модуль аутентификации в web.config
.
public class RequireBasicAuthentication : ActionFilterAttribute {
public override void OnActionExecuting(ActionExecutingContext filterContext) {
var req = filterContext.HttpContext.Request;
if (String.IsNullOrEmpty(req.Headers["Authorization"])) {
var res = filterContext.HttpContext.Response;
res.StatusCode = 401;
res.AddHeader("WWW-Authenticate", "Basic realm=\"Twitter\"");
res.End();
}
}
}
И действие контроллера:
[RequireBasicAuthentication]
public ActionResult Index() {
var cred = System.Text.ASCIIEncoding.ASCII
.GetString(Convert.FromBase64String(
Request.Headers["Authorization"].Substring(6)))
.Split(':');
var user = new { Name = cred[0], Pass = cred[1] };
return Content(String.Format("user:{0}, password:{1}",
user.Name, user.Pass));
}
Это действие успешно распечатывает имя пользователя и пароль, которые я ввел. Но я действительно сомневаюсь, что это лучший способ сделать это. У вас нет другого выбора, кроме как запросить таким образом имя пользователя и пароль?
Вы действительно хотите создать службу, а не веб-приложение, исходя из того, что я прочитал. Я предполагаю здесь, но я думаю, вы выбрали ASP.NET MVC, чтобы воспользоваться преимуществами маршрутизации и создания URL-адресов так, как вы хотите? Поправьте меня, если я ошибаюсь.
На мой взгляд, лучший способ решить возникшую у вас проблему - это создать веб-службы RESTful с WCF, если вы возвращаете данные. Эта статья должна помочь вам начать работу, если вы хотите пойти по этому пути.
В противном случае вам придется подняться выше по стеку для обработки запроса и его аутентификации. Если это так, я могу помочь с дополнительной информацией и кодом.