http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 3416|回复: 2

[反馈建议] 1.4版本 HttpResult.cs 的 RedirectUrl 可以这样改写

[复制链接]
发表于 2015-1-20 14:20:33 | 显示全部楼层 |阅读模式
本帖最后由 285900537 于 2015-1-20 14:22 编辑

1.4版本 HttpResult.cs 的 RedirectUrl 可以这样改写:

[C#] 纯文本查看 复制代码
return Header == null || Header.Count <= 0
    ? string.Empty
    : Header.AllKeys.AsEnumerable().FirstOrDefault(key => key.ToLower() == "location").SafeString();


其中SafeString() 的方法是

[C#] 纯文本查看 复制代码
[DebuggerStepThrough]
public static string SafeString(this object @object)
{
    return @object as string;
}


用于安全返回 System.String 的值





1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2015-1-20 14:33:34 | 显示全部楼层
首先感谢你的热心不过你这样写有几点不妥

1. 这个RedirectUrl本身就是属性提取,为什么要二次提取?这点感觉是不是有点多此一举了。
2.这样写如果location不存在的时候就无法获取最后一次访问的地址的。
[C#] 纯文本查看 复制代码
return Header == null || Header.Count <= 0
    ? string.Empty
    : Header.AllKeys.AsEnumerable().FirstOrDefault(key => key.ToLower() == "location").SafeString();


这样只有在Location存在并且 Allowautoredirect =false时才会有值。
3.? 号表达式其实是我个人一直不喜欢的,因为很容易把简单的问题复杂化。破坏了代码的结构性

也可能是你有其他的用意,可以说一下交流交流
 楼主| 发表于 2015-1-20 15:01:24 | 显示全部楼层
其实这段就是对 RedirectUrl 的 Getter 的改写。

无论是 Location 还是 location,其实只有一个字母的区别,用两个 If 去判断会让代码不美观。

这段表达式能够获得 location 和 Location 这两个键的值。当然,用两个 If 能做到优先获得 location,未果后才去拿 Location 的值。

SafeString 安全返回 System.String,(如果 header 内既没有 Location 也没有 location,则返回 null)。

如果不要 null,一定要 String.Empty 的话,可以这样写

[C#] 纯文本查看 复制代码
 
 return Header == null || Header.Count <= 0
    ? string.Empty
    : Header.AllKeys.AsEnumerable().Any(key => key.ToLower() == "location")
        ? Header.AllKeys.AsEnumerable().FirstOrDefault(key => key.ToLower() == "location").SafeString()
         : string.Empty;



当然,这也没有什么讲究的,还是看个人喜好。比如我更偏向用表达式来处理,会选用上面这段代码。站长更偏向于采用效率高一些的 If(在这里 If 的效率比表达式略高一些)来处理,也有人会用三元表达式来弄,比如:

[C#] 纯文本查看 复制代码
 
return Header == null || Header.Count <= 0
    ? string.Empty
    : Header.AllKeys.Contains("location")
        ? Header["location"].SafeString()
        : Header.AllKeys.Contains("Location")
            ? Header["Location"].SafeString()
            : string.Empty;


您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-2 19:31

© 2014-2021

快速回复 返回顶部 返回列表