Web服务(WebApi)应该知道呼叫客户端的位置吗?

时间:2016-10-04 09:35:59

标签: c# angularjs web-services asp.net-web-api

我编写了一个Web服务(WebApi),其中包含我的所有服务逻辑,并托管在云端。我的同事使用Angular.js编写了此服务的前端部分。

该服务包含安全性,这意味着如果客户端尝试调用API并且未经过身份验证,或者未经过授权,我们会抛出一个自定义异常,然后由WebApi使用异常过滤器(ExceptionFilterAttribute)进行过滤并转向到适当的HttpResponseMessage。

 new HttpResponseMessage(HttpStatusCode.Unauthorized);

new HttpResponseMessage(HttpStatusCode.Redirect)
{
    RequestMessage = context.Request,
};

在未授权的特殊情况下,该服务声明呼叫者未经过身份验证,我的同事将代码放入过滤器,然后将调用者重定向到Angular.js网站的登录页面,这对我来说似乎不正确 - 尤其是因为这将服务与js网站的知识紧密结合,而不是支持其他客户端平台(例如本机应用程序)。

问题是,将不可知客户从webapi网站重定向到相应的身份验证门户的正确方法是什么?是否应该从服务中删除重定向逻辑并纯粹由调用客户端处理?或者我错了,这个逻辑属于服务?

1 个答案:

答案 0 :(得分:0)

如果您将重定向逻辑放在服务中,则只能由此特定网站使用。 当网站收到状态码为Unauthorized的HttpResponseMessage时,网站应该有自己的逻辑。 这将使您的服务可以被其他网站和应用程序使用。