c# 방법 - Asp.Net 웹 서비스:403 오류를 반환하고 싶습니다.



에러 해결 (8)

Asp.Net 웹 API 2에서는 다음을 사용합니다.

return new StatusCodeResult(HttpStatusCode.Forbidden, this);

C # / asp.net에서 프로그래밍 된 웹 서비스가 있습니다.

[WebService(Namespace = "http://example.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
[System.ComponentModel.ToolboxItem(false)]
public class Service: System.Web.Services.WebService
{

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public Result GetData()
    {
        User user = GetUser();

        if (user.LoggedIn)
        {
            return GetData();
        }
        else
        {
            // raise exception -> return error 403
        }
    }

이 웹 서비스에서 오류 403을 어떻게 반환 할 수 있습니까? 나는 예외를 던질 수있다. 그러나 이것은 그의 오류가 아니라 예외를 보여주는 것이다.

어떤 아이디어?


웹 서비스 요청은 먼저 global.asax 파일을 접하게됩니다. 거기를 확인하고 돌아올 수 있습니다.


MVC를 사용한다면 다음과 같이하십시오.

            return new HttpStatusCodeResult(HttpStatusCode.Forbidden);

질문에 완전히 대답하려면 -이 코드를 사용했습니다 (자세한 내용은 strider에게 감사드립니다).

[WebService(Namespace = "http://example.com/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
[System.ComponentModel.ToolboxItem(false)]
public class Service: System.Web.Services.WebService
{

    [WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public Result GetData()
    {
        User user = GetUser();

        if (user.LoggedIn)
        {
            return GetData();
        }
        else
        {
            Context.Response.Status = "403 Forbidden"; 
            //the next line is untested - thanks to strider for this line
            Context.Response.StatusCode = 403;
            //the next line can result in a ThreadAbortException
            //Context.Response.End(); 
            Context.ApplicationInstance.CompleteRequest(); 
            return null;
        }
    }

Context.Response.StatusCode = 403;

Context.Response.StatusContext.Response.StatusCode 둘 다 설정할 필요는 없습니다. 간단히 설정하기 만하면됩니다.

Context.Response.StatusCode = (int)System.Net.HttpStatusCode.Forbidden

Response.Status 가 자동으로 설정됩니다.


금지 된 403은 귀하의 웹 사이트에서 금지 된 컨텐츠에 대한 액세스 결과입니다. 나는 당신이 여기에서 원하는 것이 "User is not logged on"이라는 결과의 일부로 메시지를 반환하는 것이라고 생각합니다.


Apache 2.4에서 일부 구성 매개 변수가 변경되었습니다. Zend Framework 2 응용 프로그램을 설정할 때 비슷한 문제가있었습니다. 몇 가지 연구가 끝나면 여기 해결책이 있습니다.

잘못된 구성

<VirtualHost *:80>
    ServerName zf2-tutorial.localhost
    DocumentRoot /path/to/zf2-tutorial/public
    SetEnv APPLICATION_ENV "development"
    <Directory /path/to/zf2-tutorial/public>
        DirectoryIndex index.php
        AllowOverride All
        Order allow,deny #<-- 2.2 config
        Allow from all #<-- 2.2 config
    </Directory>
</VirtualHost>

올바른 구성

<VirtualHost *:80>
    ServerName zf2-tutorial.localhost
    DocumentRoot /path/to/zf2-tutorial/public
    SetEnv APPLICATION_ENV "development"
    <Directory /path/to/zf2-tutorial/public>
        DirectoryIndex index.php
        AllowOverride All
        Require all granted #<-- 2.4 New configuration
    </Directory>
</VirtualHost>

Apache 2.2에서 2.4로 마이그레이션하려는 경우 http://httpd.apache.org/docs/2.4/upgrading.html을 참조하십시오 .





c# asp.net web-services http-status-code-403