ber*_*sch 30 c# asp.net web-services http-status-code-403
我有一个在c#/ asp.net中编写的Web服务.
[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
}
}
Run Code Online (Sandbox Code Playgroud)
如何从此Web服务返回错误403?我可以抛出异常 - 但这显示了异常,而不是他的错误.
有任何想法吗?
小智 28
您不需要同时设置Context.Response.Status
和Context.Response.StatusCode
.简单的设定
Context.Response.StatusCode = (int)System.Net.HttpStatusCode.Forbidden
Run Code Online (Sandbox Code Playgroud)
将自动Response.Status
为您设置.
Bry*_*end 24
如果您使用MVC,则执行以下操作:
return new HttpStatusCodeResult(HttpStatusCode.Forbidden);
Run Code Online (Sandbox Code Playgroud)
ber*_*sch 17
完全回答这个问题 - 这是我用过的代码(感谢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;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以通过将代码放在WebService构造函数中来保护所有方法.这可以防止您的WebMethod被调用:
public Service(): base()
{
if (!GetUser().LoggedIn)
{
Context.Response.StatusCode = (int)System.Net.HttpStatusCode.Forbidden;
Context.Response.End();
}
}
Run Code Online (Sandbox Code Playgroud)
在Asp.Net Web Api 2中,您将使用:
return new StatusCodeResult(HttpStatusCode.Forbidden, this);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
54358 次 |
最近记录: |