NancyFX를 사용하여 CORS를 활성화할 수 있습니까?
저는 NancyFX로 만든 API 서비스와 이 API에 대해 SPA JS 클라이언트를 만드는 프런트 엔드 개발자가 몇 명 있습니다.
클라이언트 코드를 너무 자주 공개하지 않고 공개된 서버에 대해 클라이언트 측 코드를 테스트하고 싶습니다.
단, 클라이언트는 localhost에서 실행되고 서버는 Windows Azure에서 실행됩니다.
NancyFX 서버에서 CORS를 활성화하는 것이 가능하고 쉬운가요?내가 어떻게 그럴 수 있을까?
감사해요.
낸시의 부츠스트레이퍼에서 이 일을 할 수 있다.
protected override void RequestStartup(TinyIoCContainer container, IPipelines pipelines, NancyContext context)
{
//CORS Enable
pipelines.AfterRequest.AddItemToEndOfPipeline((ctx) =>
{
ctx.Response.WithHeader("Access-Control-Allow-Origin", "*")
.WithHeader("Access-Control-Allow-Methods", "POST,GET")
.WithHeader("Access-Control-Allow-Headers", "Accept, Origin, Content-type");
});
IIS를 사용하여 Nancy를 호스트하는 경우 Windows Azure에서 web.config를 업데이트하여 모든 요청에 헤더를 추가할 수 있습니다.
이것은, 다음의 항목을 추가하는 것으로, 실행할 수 있습니다.
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
또는 Sunny가 제안하는 대로 할 수도 있습니다.또한, 매번 자신의 확장 방법을 추가할 때마다 이 내용을 기입하는 것이 마음에 들지 않는 경우는, 다음과 같이 합니다.
public static class NancyExtensions
{
public static void EnableCors(this NancyModule module)
{
module.After.AddItemToEndOfPipeline(x =>
{
x.Response.WithHeader("Access-Control-Allow-Origin", "*");
});
}
}
그럼 그냥 전화하면 돼this.EnableCors()
당신의 경로에서.
HTTP 요청이 간단한 경우 Phil의 답변으로 충분하지만, 요청이 간단하지 않은 경우 브라우저는 비행 전 체크를 보냅니다.비행 전 체크는 OPTIONS HTTP 요청이며 이것도 처리해야 합니다.
다음으로 CORS를 설정하는 확장 방법을 나타냅니다.
public static class MyNancyExtension
{
public static void EnableCORS(this Nancy.Bootstrapper.IPipelines pipelines)
{
pipelines.AfterRequest.AddItemToEndOfPipeline(ctx =>
{
if (ctx.Request.Headers.Keys.Contains("Origin"))
{
var origins = "" + string.Join(" ", ctx.Request.Headers["Origin"]);
ctx.Response.Headers["Access-Control-Allow-Origin"] = origins;
if (ctx.Request.Method == "OPTIONS")
{
// handle CORS preflight request
ctx.Response.Headers["Access-Control-Allow-Methods"] =
"GET, POST, PUT, DELETE, OPTIONS";
if (ctx.Request.Headers.Keys.Contains("Access-Control-Request-Headers"))
{
var allowedHeaders = "" + string.Join(
", ", ctx.Request.Headers["Access-Control-Request-Headers"]);
ctx.Response.Headers["Access-Control-Allow-Headers"] = allowedHeaders;
}
}
}
});
}
}
부트스트래퍼에서 CORS를 유효하게 하려면 , 다음의 내선 방식을 호출합니다.
protected override void ApplicationStartup(Nancy.TinyIoc.TinyIoCContainer container, Nancy.Bootstrapper.IPipelines pipelines)
{
base.ApplicationStartup(container, pipelines);
pipelines.EnableCORS();
}
OPTIONS는 모듈 외(여기도 마찬가지)에서 취급되므로 Nancy Module은 확장되지 않습니다.
언급URL : https://stackoverflow.com/questions/15658627/is-it-possible-to-enable-cors-using-nancyfx
'programing' 카테고리의 다른 글
지정된 서수(Excel에서)를 날짜로 변환하는 방법 (0) | 2023.04.23 |
---|---|
글로벌 Git 무시 (0) | 2023.04.23 |
cd -'는 무엇의 약자입니까? (0) | 2023.04.23 |
Active Directory 사용자 그룹을 SQL Server에서 로그인으로 추가하는 방법 (0) | 2023.04.19 |
PowerShell에서 줄 바꿈 없이 텍스트를 출력하려면 어떻게 해야 합니까? (0) | 2023.04.19 |