ver tienes solucionar significa que página para google forbidden esta error como chrome celular autorización c# asp.net web-services http-status-code-403

c# - tienes - error 403 youtube



Servicio web Asp.Net: me gustaría devolver el error 403 prohibido (8)

En Asp.Net Web Api 2, usarías:

return new StatusCodeResult(HttpStatusCode.Forbidden, this);

Tengo un servicio web programado en 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 } }

¿Cómo es posible devolver el error 403 de este servicio web? Puedo lanzar una excepción, pero esto muestra la excepción y no su error.

¿Algunas ideas?


Forbidden 403 sería el resultado del acceso al contenido prohibido en su sitio web. Creo que lo que quiere aquí es devolver un mensaje como parte de su resultado que es "El usuario no ha iniciado sesión"


No es necesario establecer Context.Response.Status y Context.Response.StatusCode . Simplemente configurando

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

configurará Response.Status automáticamente para usted.


Para responder la pregunta por completo, este es el código que he usado (gracias strider para más información):

[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; } }


Puede proteger todos sus métodos colocando el código en su constructor de WebService. Esto evita que su WebMethod siquiera sea llamado:

public Service(): base() { if (!GetUser().LoggedIn) { Context.Response.StatusCode = (int)System.Net.HttpStatusCode.Forbidden; Context.Response.End(); } }


Si usabas MVC, harías lo siguiente:

return new HttpStatusCodeResult(HttpStatusCode.Forbidden);


Sus solicitudes de servicio web encontrarán primero su archivo global.asax. Puede verificar y regresar allí.


Context.Response.StatusCode = 403;