Я создал интерфейс с Angular xx, который выбирает маршруты существующего приложения ASP.NET Web API 1.x.
Там, где возникают некоторые проблемы с аутентификацией, а также со связью сбэкэнд, из-за которого я реализовал следующий перехватчик на стороне клиента:
Angular-Interceptor для учетных данных:
@Injectable()
export class CredentialsInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler):
Observable<HttpEvent<any>> {
req = req.clone({
withCredentials: true
});
return next.handle(req);
}
}
Для обработки существующих CORS-конфликтов я модифицировал Global. asax вот так:
protected void Application_BeginRequest(object sender, EventArgs e)
{
string httpOrigin = HttpContext.Current.Request.Params["HTTP_ORIGIN"] ?? HttpContext.Current.Request.Params["ORIGIN"] ?? "*";
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", httpOrigin);
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, X-Token, withCredentials");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Credentials", "true");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.StatusCode = 200;
var httpApplication = sender as HttpApplication;
httpApplication.CompleteRequest();
}
}
И web.config вот так:
<system.web>
<authentication mode="Windows" />
<authorization>
<allow verbs="OPTIONS" users="*"/>
<deny users="?"/>
</authorization>
</system.web>
<system.webServer>
<handlers>
<remove name="WebDAV" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
На моем локальном компьютере бэкэнд был доступен в localhost:80
(с IIS Express), пока яя разместил мое приложение Angular на 192.168.xxx.xx:80
через IIS 10.
В этой среде все работало идеально, и у меня не было никаких проблем.
Среда тестирования - это сервер с Windows Server 2008R2 и IIS 7.5. Для Deep-Link-Usage URL-Rewriter 2 установлен
После сборки Backend и Frontend и развертывания в упомянутой среде приложение работает, как и ожидалось, кроме одного большого недостатка.
Backend-Адрес в IIS: *: 80, *: 8080 и т. Д.
Адрес внешнего интерфейса в IIS - IP-адрес сервера: 80
В то время как некоторые маршруты работают, как и ожидалось, некоторые другие работают в локальном-setup выдают следующую CORS-проблему:
Access to XMLHttpRequest at *route* from origin *origin* has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No "Access-Control-Allow-Origin" header is present on the requested source.
Пока что я не могу найти никаких различий между работающими контроллерами и теми, кто не работает.
Есть у кого-нибудь идеячто происходит здесь?