Я пишу несколько тестов сервисов ServiceStack, требующих аутентификации с использованием пользовательского CredentialAuthenticationProvider.Служба ServiceStack перенаправляется на страницу входа в формы MVC
Если я создаю тест, не проверяя подлинность с помощью служебной программы, я получаю ошибку сериализации вместо ошибки 401. Ошибка сериализации - это то, что служба перенаправляется на HTML-страницу входа MVC.
Как предотвратить перенаправление на MVC, когда вызов находится в/api/path для сервисов serviceStack, чтобы служба вместо этого возвращала 401?
[TestMethod]
public void DeleteUser_not_authenticated()
{
var client = new JsonServiceClient(STR_APIURL);
var resp1 = client.Post(new Auth() { UserName = "user", Password = "***" });
Assert.IsTrue(resp1.UserName == "user");
var user = client.Get(new GetSupportUser { Email = "[email protected]" });
client.Post(new Auth { provider = "logout" });
try
{
var resp = client.Delete(user);
}
catch (HttpException e)
{
Assert.IsTrue(e.GetHttpCode() == 401);
}
}
Редактировать
Per Mythz предложение, я попробовал это в global.aspx, но это не помешало редирект:
protected void Application_EndRequest(object src, EventArgs e)
{
ServiceStack.MiniProfiler.Profiler.Stop();
var ctx = (HttpApplication)src;
if (ctx.Request.Path.Contains("/api/"))
ctx.Response.SuppressFormsAuthenticationRedirect = true;
}
Я не могу этого сделать, поскольку у меня есть внешний интерфейс MVC, использующий проверку подлинности форм. Этот ответ, я думаю, близок, но относится к вызовам AJAX http://stackoverflow.com/a/13811295/4621260. – brussell
Я мог бы заставить ваше предложение работать, если я проверю запрос на/api * в пути. – brussell
@brussell Я обновил ответ, чтобы ограничить запросы '/ api *'. – mythz