/// <summary> /// 比较新品并上架 /// </summary> /// <returns></returns> public bool CarepareAndUpItem() { BaseReadWebPage newItem = new BaseReadWebPage(); BaseReadWebPage downItem = new BaseReadWebPage(); BaseReadWebPage onlineItem = new BaseReadWebPage(); newItem.ReadBaseItemInfo("TK/低于20以上.csv", true); downItem.ReadBaseItemInfo("TKAdmin/down.csv", true); onlineItem.ReadBaseItemInfo("TKAdmin/TKAdmin.csv", true); Http.HttpRequest http = new Http.HttpRequest(); http.CookieContainer = Login(); foreach (string key in newItem.ShopAllItems.Keys) { if (onlineItem.ShopAllItems.ContainsKey(key)) { continue; } if (downItem.ShopAllItems.ContainsKey(key)) { downItem.ShopAllItems[key].ShopPrice = newItem.ShopAllItems[key].ShopPrice; ReUpItem(downItem.ShopAllItems[key], http); CommonFun.WriteCSV("TKAdmin/need_reUp.csv", downItem.ShopAllItems[key]); continue; } UpNewItem(newItem.ShopAllItems[key], http); CommonFun.WriteCSV("TKAdmin/new" + fileName + ".csv", newItem.ShopAllItems[key]); } return(true); }
public Message CreateMessage(IHeaderDictionary headers, Http.HttpRequest request) { var m = CreateMessage(headers); m.Body = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(request)); return(m); }
public async Task RecordSessionAsync(Http.HttpRequest request, Http.HttpResponse response, TimeSpan duration) { int sessionId = -1; lock (this) { sessionId = nextSessionNumber++; } // Write client request var requestPart = this.outputPackage.CreatePart(UriForPart(sessionId, 'c'), "text/plain"); using (var requestStream = requestPart.GetStream(System.IO.FileMode.Create)) { await request.WriteToStreamAsync(requestStream); } var responsePart = this.outputPackage.CreatePart(UriForPart(sessionId, 's'), "text/plain"); using (var responseStream = responsePart.GetStream(System.IO.FileMode.Create)) { await response.WriteToStreamAsync(responseStream); } var metadataPart = this.outputPackage.CreatePart(UriForPart(sessionId, 'm'), "application/xml"); var metadata = CreateMetadataForSession(sessionId, request.StartTime, duration); using (var metadataStream = metadataPart.GetStream(System.IO.FileMode.Create)) { await metadata.WriteToStreamAsync(metadataStream); } }
public bool UpAllNewItme() { BaseReadWebPage newItem = new BaseReadWebPage(); newItem.ReadBaseItemInfo("TKAdmin/new.csv", true); Http.HttpRequest http = new Http.HttpRequest(); int totalCount = newItem.ShopAllItems.Count; int curCount = 0; foreach (BaseItemInfo item in newItem.ShopAllItems.Values) { if (curCount % 100 == 0) { http.CookieContainer = Login(); } UpNewItem(item, http); curCount++; Console.WriteLine("{0}:UpNewItem,TotalCount{1}, curCount:{2}", DateTime.Now, totalCount, curCount); } return(true); }
/// <summary> /// 上架新物品 /// </summary> /// <param name="id"></param> /// <returns></returns> public bool UpNewItem(BaseItemInfo item, Http.HttpRequest http) { if (item.ShopPrice < 5) { return(false); } //find string findUrl = "https://admin.tkyfw.com/Goods/findExp"; string findPostData = "store_id=34"; http.HttpPost(findUrl, findPostData); //findApp string findAppUrl = "https://admin.tkyfw.com/Goods/findAppNum"; string findAppPostData = string.Format("appNum:{0}", item.ID); http.HttpPost(findAppUrl, findAppPostData); string url = string.Format("https://admin.tkyfw.com/Goods/complateInfo?cat_first=&cat_second=&cat_third=&approval_number={0}", item.ID); string upNewItemUrl = "https://admin.tkyfw.com/Goods/findRepeatCheck"; string checkUrl = "https://admin.tkyfw.com/Goods/checkGoods"; string content = http.HttpGet(url); MatchCollection ms = CommonFun.GetValues(content, "gxtj_ul", "</li>"); foreach (Match m in ms) { string fromat = CommonFun.GetValue(m.Value, "<span>", "<span>"); fromat = CommonFun.FormatStr(fromat, item.Name); if (fromat == item.Format) { string boxStr = CommonFun.GetValue(m.Value, "\"checkbox\"", "/>"); string value = CommonFun.GetValue(boxStr, "value=\"", "\""); string result = http.HttpPost(upNewItemUrl, string.Format("value_arr={0}{1}", value, HttpUtility.UrlEncode(","))); result = CommonFun.GetValue(result, ":", "}"); if (result == "2") { CommonFun.WriteCSV("TKAdmin/UpNew" + fileName + ".csv", item); http.HttpPost(checkUrl, "", url, "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", null); Console.WriteLine("UpNewItem,name:{0}, id:{1}, fromat:{2}", item.Name, item.ID, item.Format); } Thread.Sleep(random.Next(3, 6) * 1000); // UpdatePrice(item, http); } } return(true); }
/// <summary> /// 是否可以接 /// </summary> /// <returns></returns> public bool CanTake(string content, Http.HttpRequest http) { string infoStr = CommonFun.GetValue(content, "<tr>", "</tr>"); MatchCollection tdMs = CommonFun.GetValues(infoStr, "<td>", "</td>"); string orderNO = CommonFun.GetValue(infoStr, "<td class=\"tablenow\">", "</td>"); bool result = false; MatchCollection ms = CommonFun.GetValues(content, "<div class=\"tkzds\">", "</div>"); string format = ms[0].Value; string id = ms[1].Value; string key = id + format; //是否TK平台的单 if (orderNO.StartsWith("TK") && !IsSelfOrder(content)) { string drs = tdMs[5].Value; //不是同城 if (!drs.Contains("长沙")) { BaseItemInfo item = items.ContainsKey(key) ? items[key] : null; //在线支付 if (infoStr.Contains("在线支付") || (infoStr.Contains("货到付款") && item != null && item.Type == "201")) { string msg = CommonFun.GetValue(content, "<li>买家留言:<span>", "</span></li>"); string remark = CommonFun.GetValue(content, "<li>平台备注:<span>", "</span></li>"); //无需发票 if (!msg.Contains("发票") && !remark.Contains("发票")) { //MatchCollection ms = CommonFun.GetValues(content, "<div class=\"tkzds\">", "</div>"); //单品 if (ms.Count == 5) { //ms = CommonFun.GetValues(content, "span1 xiatiaomar\">", "</div>"); decimal price = Convert.ToDecimal(ms[2].Value); //价格合理 if (items.ContainsKey(key)) { if (true || items[key].PlatformPrice <= price) { result = true; } else { Console.WriteLine("Price info orderPrice:{0}, sellPrice:{1}", price, items[key].PlatformPrice); } } } } } } } return(result); }
/// <summary> /// Returns a string from a url using 'Get' between two strings, starts from <paramref name="strStart"/> to <paramref name="strEnd"/> from <paramref name="strSource"/> /// </summary> /// <param name="URL">The Url Returning source string of the context.</param> /// <param name="strStart">The head start of the param</param> /// <param name="strEnd">The tail end of the param</param> /// <returns>The string between <paramref name="strStart"/> and <paramref name="strEnd"/> from <paramref name="strSource"/></returns> public static string BetweenUrl(string URL, string strStart, string strEnd) { string strSource = ""; try { using (Http.HttpRequest rq = new Http.HttpRequest()) { rq.UserAgent = HttpHelper.ChromeUserAgent(); strSource = rq.Get(URL).ToString(); } int Start, End; if (strSource.Contains(strStart) && strSource.Contains(strEnd)) { Start = strSource.IndexOf(strStart, 0) + strStart.Length; End = strSource.IndexOf(strEnd, Start); return(strSource.Substring(Start, End - Start)); } else { return(""); } } catch (HttpException ex) { return(ex.ToString()); } }
/// <summary> /// 获取订单列表 /// </summary> /// <returns></returns> public string GetOrderList(Http.HttpRequest http) { string url = "https://admin.tkyfw.com/Order/turn_out_pool"; string content = http.HttpGet(url); return(content); }
/// <summary> /// 接单 /// </summary> /// <returns></returns> public bool TakeOrder(string id, Http.HttpRequest http) { string url = "https://admin.tkyfw.com//Order/to_undertake"; string postStr = string.Format("id={0}&Q=1", id); string result = http.HttpPost(url, postStr); return(true); }
/// <summary> /// 从下架列表中重新上架 /// </summary> /// <param name="item"></param> /// <returns></returns> public bool ReUpItem(BaseItemInfo item, Http.HttpRequest http) { if (item.ShopPrice > 5) { string url = "https://admin.tkyfw.com/Goods/edit_upGoods"; string postStr = string.Format("storeid[]={0}", item.ViewCount); string result = http.HttpPost(url, postStr); } return(true); }
/// <summary> /// 接单处理 /// </summary> /// <param name="item"></param> /// <param name="http"></param> public void ProcessOrder(string item, Http.HttpRequest http) { if (CanTake(item, http)) { string id = CommonFun.GetValue(item, "rel=\"", "\""); if (!orderList.ContainsKey(id) && TakeOrder(id, http)) { orderList.Add(id, id); Console.WriteLine("Take Order !!!!!!!!!!!!!!!!!!"); } } }
/// <summary> /// 获取在售列表 /// </summary> /// <param name="http"></param> /// <returns></returns> public Dictionary <string, BaseItemInfo> GetSellingItem(Http.HttpRequest http) { Dictionary <string, BaseItemInfo> items = new Dictionary <string, BaseItemInfo>(); string url = "https://admin.tkyfw.com/Goods/throughAudit?/Goods/throughAudit=&status=1&state=1"; string content = http.HttpGet(url); string itemStr = CommonFun.GetValue(content, "<form name=\"form\" method=\"post\">", "</form>"); List <BaseItemInfo> temp = GetOnePageItems(itemStr); string pageStr = CommonFun.GetValue(content, "下一页", "><span>末页</span>"); pageStr = CommonFun.GetValue(pageStr, "&p=", "\""); pageStr = pageStr.Substring(pageStr.LastIndexOf("=") + 1); int totalPage = 0; if (!string.IsNullOrEmpty(pageStr)) { totalPage = Convert.ToInt32(pageStr); } for (int i = 2; i <= totalPage; i++) { content = http.HttpGet("https://admin.tkyfw.com/Goods/throughAudit?/Goods/throughAudit=&status=1&state=1&p=" + i); itemStr = CommonFun.GetValue(content, "<form name=\"form\" method=\"post\">", "</form>"); temp.AddRange(GetOnePageItems(itemStr)); Console.WriteLine("{0}:GetSelling totalPage:{1}, curPage{2}.....", DateTime.Now, totalPage, i); } foreach (BaseItemInfo item in temp) { string key = item.ID + item.Format; if (!items.ContainsKey(key)) { items.Add(key, item); } else { Console.WriteLine("Error, Same Itme key:{0}", key); } } return(items); }
/// <summary> /// 自动接单 /// </summary> /// <returns></returns> public bool AutoGetOrder(Http.HttpRequest http) { //获取订单 string content = GetOrderList(http); MatchCollection ms = CommonFun.GetValues(content, "<tbody>", "</tbody>"); foreach (Match m in ms) { ProcessOrder(m.Value, http); } return(true); }
/// <summary> /// HTTP/1.1 요청이 들어오면 이곳에서 처리합니다. /// </summary> /// <param name="request">HTTP 요청 데이터</param> /// <returns>HTTP 리스폰스</returns> private Http.HttpResponse OnHttpRequest(Http.HttpRequest request) { Console.WriteLine("SimpleAdaptor::OnHttpRequest " + request.requestUri); var response = new Http.HttpResponse(); response.code = Http.ResponseCode.OK; response.reasonPhrase = "OK"; response.SetContent("Hello World! " + request.requestUri); throw new CloseSessionException(response); //return response; }
public bool ReUpItemByCSV(string fileName) { try { Http.HttpRequest http = new Http.HttpRequest(); BaseReadWebPage newItem = new BaseReadWebPage(); BaseReadWebPage downItemList = new BaseReadWebPage(); newItem.ReadBaseItemInfo(fileName, true); downItemList.ReadBaseItemInfo("TKAdmin/down.csv", true); int count = 0; foreach (BaseItemInfo item in newItem.ShopAllItems.Values) { foreach (BaseItemInfo downItem in downItemList.ShopAllItems.Values) { if (item.ID == downItem.ID) { if (count % 100 == 0) { http.CookieContainer = Login(); } count++; downItem.ShopPrice = downItem.PlatformPrice; ReUpItem(downItem, http); Thread.Sleep(random.Next(3, 6) * 1000); break; } } } Console.WriteLine("UpItem count:{0}", count); } catch (Exception e) { Console.WriteLine(e); } return(true); }
/// <summary> /// 重新上架所有物品 /// </summary> /// <returns></returns> public bool ReUpAllItem() { BaseReadWebPage newItem = new BaseReadWebPage(); Http.HttpRequest http = new Http.HttpRequest(); http.CookieContainer = Login(); newItem.ReadBaseItemInfo("TKAdmin/need_reUp.csv", true); foreach (BaseItemInfo item in newItem.ShopAllItems.Values) { ReUpItem(item, http); } return(true); }
/// <summary> /// 更新库存 /// </summary> /// <returns></returns> public bool UpdateInventory() { Http.HttpRequest http = new Http.HttpRequest(); http.CookieContainer = Login(); items = GetSellingItem(http); foreach (BaseItemInfo item in items.Values) { if (!string.IsNullOrEmpty(item.Inventory) && Convert.ToInt32(item.Inventory) >= 50) { UpdatePrice(http, item.PlatformPrice, item.ViewCount, null, null); Sleep(); } } return(true); }
private Http.HttpResponse OnHttpRequest(Http.HttpRequest request) { Console.WriteLine("StaticFileAdaptor::OnHttpRequest " + request.requestUri); var response = new Http.HttpResponse(); var path = request.requestUri.Substring(1).Replace("/", "\\"); if (path.Contains("..\\")) { response.code = Http.ResponseCode.Forbidden; response.reasonPhrase = "Forbidden"; } else if (File.Exists(path) == false) { response.code = Http.ResponseCode.NotFound; response.reasonPhrase = "NotFound"; } else { response.code = Http.ResponseCode.OK; response.reasonPhrase = "OK"; response.headers["Content-Type"] = "application/octet-stream"; using (var fp = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read)) { if (fp.Length > int.MaxValue) { throw new NotImplementedException("size over INT_MAX"); } response.content = new byte[fp.Length]; fp.Read(response.content, 0, Convert.ToInt32(fp.Length)); } } return(response); }
/// <summary> /// 开始自动接单 /// </summary> public void StartAutoGetOrder() { //登录 Http.HttpRequest http = new Http.HttpRequest(); http.CookieContainer = Login(); items = GetSellingItem(http); double startStamp = GetNowTimestampS(); double loginStamp = GetNowTimestampS(); while (true) { Console.WriteLine("{0}:GetOrdering...........", DateTime.Now); AutoGetOrder(http); //每天更新一次在售列表 if (GetNowTimestampS() - startStamp > 24 * 3600) { items = GetSellingItem(http); startStamp = GetNowTimestampS(); } //每半小时重新登录 if (GetNowTimestampS() - startStamp > 1200) { http.CookieContainer = Login(); loginStamp = GetNowTimestampS(); } Thread.Sleep(1000); } }
/// <summary> /// 自定义分页 /// </summary> /// <param name="htmlHelper"></param> /// <param name="rowCount">当前页记录条数</param> /// <returns></returns> public static IHtmlContent Pager(this IHtmlHelper htmlHelper, Http.HttpRequest request, int rowCount) { StringBuilder resultBuilder = new StringBuilder();//输出结果 try { int pageIndex = 1; string url = request.Path; //获取当前页码 if (request.RouteValues["p"] != null) { pageIndex = Convert.ToInt32(request.RouteValues["p"].ToString()); url = url.Substring(0, url.LastIndexOf("/")); } //处理分页样式 resultBuilder.Append($"<li class=\"page-item\"><a class=\"page-link\" href=\"{url}\">回到首页</a></li>"); resultBuilder.Append($"<li class=\"page-item\"><a class=\"page-link\" href=\"{url}{(pageIndex == 1 ? "" :$"/{pageIndex - 1}" )}\">上一页</a></li>"); resultBuilder.Append($"<li class=\"page-item active\"><span class=\"page-link\">{pageIndex}</span></li>"); // if (rowCount > 0) { resultBuilder.Append($"<li class=\"page-item\"><a class=\"page-link\" href=\"{url}{(pageIndex == 1 ? "" : $"/{pageIndex + 1}")}\">下一页</a></li>");
/// <summary> /// Returns a paged result from a queryable collection. /// </summary> /// <param name="source">Collection source.</param> /// <param name="pageInfo">Page information.</param> /// <param name="request">Http request.</param> /// <returns></returns> public static PagedResult <T> ToPagedResult <T>(this IQueryable source, PagingInfo pageInfo, Http.HttpRequest request = null) where T : class { var list = GetGenericSkip((dynamic)source, (pageInfo.Page - 1) * pageInfo.PageSize, pageInfo.PageSize); int totalResults = GetGenericCount((dynamic)source); int totalPages = (int)Math.Ceiling((decimal)totalResults / (decimal)pageInfo.PageSize); string nextLink = ""; string previousLink = ""; if (request != null) { if (pageInfo.Page < totalPages) { nextLink = request.SchemeAndHost(); nextLink += "?page=" + (pageInfo.Page + 1).ToString(); if (request.Query.ContainsKey("pagesize")) { nextLink += "&pagesize=" + request.Query["pagesize"]; } } if (pageInfo.Page > 1) { previousLink = request.SchemeAndHost(); previousLink += "?page=" + (pageInfo.Page - 1).ToString(); if (request.Query.ContainsKey("pagesize")) { previousLink += "&pagesize=" + request.Query["pagesize"]; } } } return(new PagedResult <T>() { Collection = list, Pagination = new PagingInfo { TotalResults = totalResults, // total number of records returned, i.e. 4300 TotalPages = totalPages, // total number of pages (ceiling) = totalResults / MaxPageSize PageSize = pageInfo.PageSize, // current page size, would be 3 x 1000 then 1 x 300 Page = pageInfo.Page, // current page //MaxPageSizeAllowed = pi.MaxPageSizeAllowed, Next = nextLink, Previous = previousLink } }); }
public static PagedResult ToPagedResult(this IQueryable source, PagingInfo pageInfo, Http.HttpRequest request = null) { return(ToPagedResult <object>(source, pageInfo, request) as PagedResult); }
private Http.HttpResponse ExecCgi(Http.HttpRequest request) { Process p = new Process(); var env = p.StartInfo.EnvironmentVariables; var tokens = request.requestUri.Split(new char[] { '?' }, 2); if (tokens.Length != 2) { env["QUERY_STRING"] = ""; } else { env["QUERY_STRING"] = tokens[1]; } env["REQUEST_URI"] = request.requestUri; env["DOCUMENT_URI"] = "/"; var scriptPath = request.path; if (scriptPath.EndsWith("/")) { scriptPath += "index.php"; } scriptPath = scriptPath.Substring(1); env["SCRIPT_FILENAME"] = scriptPath; env["SCRIPT_NAME"] = "IM JINWOO"; env["GATEWAY_INTERFACE"] = "CGI/1.1"; env["SERVER_SOFTWARE"] = "ASDF"; env["REDIRECT_STATUS"] = "CGI"; env["SERVER_ADDR"] = "127.0.0.1"; env["SERVER_NAME"] = "JIWNOOSERVER"; env["SERVER_PORT"] = "80"; env["SERVER_PROTOCOL"] = "HTTP/1.1"; env["SERVER_SIGNATURE"] = ""; env["SERVER_SOFTWARE"] = "HttpServ.cs"; p.StartInfo.UseShellExecute = false; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardError = true; p.StartInfo.FileName = "C:\\Users\\hyun\\Downloads\\php-7.0.8-nts-Win32-VC14-x86\\php-cgi.exe"; p.StartInfo.WorkingDirectory = "C:\\Users\\hyun\\Downloads\\php-7.0.8-nts-Win32-VC14-x86\\"; p.Start(); if (p.WaitForExit(1000) == false) { throw new InvalidOperationException("CGI::TimeOut"); } Console.WriteLine("END PHP"); var buffer = p.StandardOutput.ReadToEnd(); var error = p.StandardError.ReadToEnd(); Console.WriteLine(error); Console.WriteLine("PHP DATA"); Console.WriteLine(buffer); var builder = new Http.HttpRequestBuilder(); builder.parser.ForceSkipRequestLine(); builder.parser.ForceAllowContentWithoutLength(); foreach (var w in builder.Write(Encoding.UTF8.GetBytes(buffer))) { ; } var cgiResult = builder.WriteEof(); foreach (var header in cgiResult.headers) { Console.WriteLine($"{header.Key} : {header.Value}"); } Console.WriteLine(Encoding.UTF8.GetString(cgiResult.content)); var response = new Http.HttpResponse(Http.ResponseCode.OK); foreach (var header in cgiResult.headers) { response.headers[header.Key] = header.Value; } response.SetContent(cgiResult.content); return(response); }
private Http.HttpResponse OnHttpRequest(Http.HttpRequest request) { Console.WriteLine("SimpleAdaptor::OnHttpRequest " + request.requestUri); return(ExecCgi(request)); }
/// <summary> /// 获取平台最低价 /// </summary> /// <param name="id"></param> /// <param name="format"></param> /// <param name="http"></param> /// <returns></returns> public decimal GetPlatformPrice(string id, string format, Http.HttpRequest http, bool isSameOther = false) { try { decimal price = decimal.MaxValue; decimal otherPrice = decimal.MaxValue; int changeNum = 0; string url = string.Format("https://www.tkyfw.com/Ching_search.html?keyword={0}", id); string content = http.HttpGet(url); content = CommonFun.GetValue(content, "<ul class=\"seach_list\">", "</ul>"); MatchCollection ms = CommonFun.GetValues(content, "<li>", "</li>"); foreach (Match m in ms) { string item_format = CommonFun.GetValue(m.Value, "规格:", "</p>"); if (item_format == format) { MatchCollection urlMs = CommonFun.GetValues(m.Value, "<a href=\"", "\""); content = http.HttpGet("https://www.tkyfw.com" + urlMs[0].Value); MatchCollection itemMs = CommonFun.GetValues(content, "<div class=\"merinfo\">", "</label>"); foreach (Match itemM in itemMs) { string priceStr = CommonFun.GetValue(itemM.Value, "¥", "</p>"); string shopInfo = CommonFun.GetValue(itemM.Value, "市<span>-</span>", "</a>"); try { if (!string.IsNullOrEmpty(priceStr)) { decimal temp = Convert.ToDecimal(priceStr); if (temp != price) { changeNum++; } if (isSameOther && shopInfo == other_store_name) { otherPrice = temp; break; } else if (shopInfo != store_name) { if (temp < price) { price = temp; } } } } catch (Exception ex) { Console.WriteLine(ex); } } break; } } if (otherPrice != decimal.MaxValue) { return(otherPrice); } else { //if (changeNum == 1) //{ // return price; //} return(price); //if (price != decimal.MaxValue) //{ // return (price - (decimal)0.01); //} //else //{ // return price; //} } } catch (Exception ex) { Console.WriteLine(ex); } return(decimal.MaxValue); //return otherPrice != decimal.MaxValue ? otherPrice : (price - (decimal)0.01); }
/// <summary> /// 自定义分页 /// </summary> /// <param name="htmlHelper"></param> /// <param name="totalCount">总记录数</param> /// <returns></returns> public static IHtmlContent Pager(this IHtmlHelper htmlHelper, Http.HttpRequest request, int totalCount) { StringBuilder resultBuilder = new StringBuilder();//输出结果 try { int pageIndex = 1; string url = request.Path; //获取当前页码 if (request.RouteValues["p"] != null) { pageIndex = Convert.ToInt32(request.RouteValues["p"].ToString()); url = url.Substring(0, url.LastIndexOf("/")); } int pageSize = 10; int pageCount = 0; //得到总页码数 if (totalCount % pageSize == 0) { pageCount = totalCount / pageSize; } else { pageCount = totalCount / pageSize + 1; } //处理分页样式 resultBuilder.Append($"<li class=\"page-item\"><a class=\"page-link\" href=\"{url}\">回到首页</a></li>"); resultBuilder.Append($"<li class=\"page-item\"><a class=\"page-link\" href=\"{url}{(pageIndex == 1 ? "" :$"/{pageIndex - 1}" )}\">上一页</a></li>"); // //中间页码计算 int beginCount = 1;//开始页码 if (pageIndex > 5) { beginCount = pageIndex - 5; } int endCount = pageCount; if (pageCount - pageIndex > 5) { endCount = pageIndex + 5; } for (int i = beginCount; i <= endCount; i++) { if (pageIndex == i) { resultBuilder.Append($"<li class=\"page-item active\"><span class=\"page-link\">{i}</span></li>"); } else { resultBuilder.Append($"<li class=\"page-item\"><a class=\"page-link\" href=\"{url}/{i}\">{i}</a></li>"); } } // if (pageIndex < pageCount) { resultBuilder.Append($"<li class=\"page-item\"><a class=\"page-link\" href=\"{url}/{pageIndex + 1}\">下一页</a></li>"); } else { resultBuilder.AppendFormat("<li class=\"page-item\"><a class=\"page-link active\" href=\"{0}\">你已经找到了最后一处藏数据的地方...</a></li>", "#"); } }
/// <summary> /// 自定义分页(Ayong:2016.10.20) /// </summary> /// <param name="HtmlHelper"></param> /// <param name="PageIndex">页码</param> /// <param name="PageSize">每页记录条数</param> /// <param name="TotalCount">总条数</param> /// <returns></returns> public static IHtmlContent Pager(this IHtmlHelper HtmlHelper, Http.HttpRequest Request, int PageSize, int TotalCount) { StringBuilder ResultBuilder = new StringBuilder();//输出结果 try { int PageIndex = 1; string url = Request.Path; //拼接除页码参数以外的所有参数 string param = string.Empty; foreach (string key in Request.Query.Keys) { if (key != "p") { param += string.Format("&{0}={1}", key, Request.Query[key]); } } param = param.TrimStart('&'); url = string.Format("{0}?{1}", url, param); //获取当前页码 if (Request.Query["p"].Count > 0) { PageIndex = int.Parse(Request.Query["p"]); } int PageCount = 0; //得到总页码数 if (TotalCount % PageSize == 0) { PageCount = TotalCount / PageSize; } else { PageCount = TotalCount / PageSize + 1; } //处理分页样式 //ResultBuilder.Append("<ul>"); ResultBuilder.AppendFormat("<li class=\"page-item\"><a class=\"page-link\" href=\"{0}\">首页</a></li>", url); ResultBuilder.AppendFormat("<li class=\"page-item\"><a class=\"page-link\" href=\"{0}&p={1}\">上一页</a></li>", url, PageIndex == 1 ? 1 : PageIndex - 1); //中间页码计算 int BeginCount = 1;//开始页码 if (PageIndex > 5) { BeginCount = PageIndex - 5; } int EndCount = PageCount; if (PageCount - PageIndex > 5) { EndCount = PageIndex + 5; } for (int i = BeginCount; i <= EndCount; i++) { if (PageIndex == i) { ResultBuilder.Append(string.Format("<li class=\"page-item active\"><span class=\"page-link\">{0}</span></li>", i)); } else { ResultBuilder.Append(string.Format("<li class=\"page-item\"><a class=\"page-link\" href=\"{0}&p={1}\">{2}</a></li>", url, i, i)); } } // ResultBuilder.AppendFormat("<li class=\"page-item\"><a class=\"page-link\" href=\"{0}&p={1}\">下一页</a></li>", url, PageIndex == PageCount ? PageCount : PageIndex + 1); ResultBuilder.AppendFormat("<li class=\"page-item\"><a class=\"page-link\" href=\"{0}&p={1}\">尾页</a></li>", url, PageCount); //ResultBuilder.Append("</ul>"); } catch { ResultBuilder.Append("分页出现异常..."); } return(new HtmlString(ResultBuilder.ToString())); }
public static async Task <Http.HttpContext> ToSuaveHttpContext( this HttpContext context, bool preserveHttpHeaderCasing) { var request = context.Request; // Get HTTP headers var headers = ListModule.OfSeq( request.Headers .Select(h => new Tuple <string, string>( preserveHttpHeaderCasing ? h.Key : h.Key.ToLower(), h.Value)) .ToList()); // Get the absolute URL var host = request.Host.Value; var absoluteUrl = $"{request.Scheme}://{host}{request.Path}{request.QueryString.Value}"; // Get the raw query string (Suave doesn't include the ? in the beginning) var rawQuery = request.QueryString.Value.Substring(Math.Min(request.QueryString.Value.Length, 1)); // Get files and multipart fields from a form request var files = new List <Http.HttpUpload>(); var multipartFields = new List <Tuple <string, string> >(); if (request.HasFormContentType && request.Form != null && request.Form.Count > 0) { multipartFields.AddRange( request.Form.Select(field => new Tuple <string, string>(field.Key, field.Value))); if (request.Form.Files != null && request.Form.Files.Count > 0) { foreach (var file in request.Form.Files) { var tempFileName = Path.GetTempFileName(); using (var fileStream = File.Open(tempFileName, FileMode.OpenOrCreate)) await file.OpenReadStream().CopyToAsync(fileStream); files.Add( new Http.HttpUpload( file.Name, file.FileName, file.ContentType, tempFileName)); } } } // Get the raw body // (This will be an empty byte array if the stream has already been // read during the form upload) var rawForm = await request.Body.ReadAllBytesAsync(); var suaveRequest = new Http.HttpRequest( request.Protocol, new Uri(absoluteUrl), request.Host.Host, HttpMethodFromString(request.Method), headers, rawForm, rawQuery, ListModule.OfSeq(files), ListModule.OfSeq(multipartFields), TraceHeader.parseTraceHeaders(headers)); var suaveRuntime = Http.HttpRuntimeModule.empty; var suaveSocketConnection = ConnectionModule.empty; return (Http.HttpContextModule.create( suaveRequest, suaveRuntime, suaveSocketConnection, false)); }
internal HttpResponse(Http.HttpRequest request) { _request = request; }