我们在生产中部署了一个REST服务,它返回一个简单对象的XML序列化表示。
当调用REST'get'方法时,我们看到一个非常奇怪的问题,即在完成所有用户代码之后(根据我们自己的日志),我们在浏览器中获得401渲染对象XML。在REST方法中执行'return'语句期间,它在服务器端失败。
我们认为我们理解了问题的这一部分......该对象包含一个枚举,其值实际上是从数据库返回的。在这种特殊情况下,我们设法为枚举本身未定义的枚举分配一个整数值(允许这种行为,这是Enum.IsDefined方法的原因:http://msdn.microsoft.com/en-us/library/system.enum.isdefined.aspx)
我们的假设是,当REST框架代码处理'return'语句时,它会尝试将Enum序列化为文本值,然后因为指定值不存在名称(字符串)而爆炸。
奇怪的是,我们得到的是401(以及浏览器中的凭据提示),而不是获得死亡或类似的黄色屏幕。
我们想知道ASP.NET / IIS在这些情况下是否会执行某种类型的Server.Transfer,但是它可能没有对它传输到的页面的文件系统权限 - ?我们对发动机罩下发生的事情感到困惑!没有客户端重定向。
任何想法?
答案 0 :(得分:0)
HTTP状态代码401表示未经授权。来自wikipedia:
401未经授权
与403 Forbidden类似,但特别适用于可能进行身份验证但已失败或尚未提供的情况。[2]响应必须包含WWW-Authenticate头字段,其中包含适用于所请求资源的质询。请参阅基本访问身份验证和摘要访问身份验证。
我会开始考虑如何设置身份验证。