รูปร่างบ้า คำอธิบายของออบเจ็กต์การตอบสนอง html การตอบสนองของ Savage

หากต้องการรับอินสแตนซ์ของคลาสนี้ ให้ใช้การเรียกเมธอด wa()->getResponse() เช่น:

Wa()->getResponse()->getHeader("ประเภทเนื้อหา")

วิธีการ

งานสาธารณะ addCss ($url, $app_id = เท็จ)

เพิ่ม URL ในรายการไฟล์ CSS URL ไฟล์ CSS ที่เพิ่มทั้งหมดสามารถเรียกค้นได้ในเทมเพลต Smarty โดยใช้วิธี ($wa->css())

ตัวเลือก

  • $url

    URL สัมพัทธ์ของไฟล์ CSS หากระบุค่าของพารามิเตอร์ $app_id ควรระบุ URL ของไฟล์โดยสัมพันธ์กับ URL ของไดเร็กทอรีที่มีไฟล์ของแอปพลิเคชันที่เกี่ยวข้อง มิฉะนั้น ควรระบุ URL แบบสัมพันธ์โดยสัมพันธ์กับไดเร็กทอรีการติดตั้งเฟรมเวิร์ก

  • $app_id

    รหัสแอปพลิเคชัน

ตัวอย่าง

วา()->getResponse()->addCss("css/myapp.css", "myapp");

งานสาธารณะ เพิ่ม GoogleAnalytics ($str)

เพิ่มข้อมูลโค้ด JavaScript สำหรับ Google Analytics รหัสของ Googleการวิเคราะห์ (รวมถึงที่เพิ่มโดยวิธีนี้) เชื่อมต่ออยู่ในเทมเพลต HTML ของไซต์โดยใช้วิธี ($wa->headJs())

ตัวเลือก

  • $str

    ส่วนโค้ด JavaScript

งานสาธารณะ เพิ่มส่วนหัว ($name, $value, $replace = true)

เพิ่มส่วนหัวที่เซิร์ฟเวอร์จะถูกส่งเพื่อตอบสนองต่อคำขอของผู้ใช้ ส่วนหัวทั้งหมดที่เพิ่มด้วยวิธีนี้จะถูกส่งไปยังผู้ใช้เมื่อมีการดำเนินการวิธีการนี้

ตัวเลือก

  • $ชื่อ

    ชื่อหัวเรื่อง.

  • $value

    ค่าชื่อเรื่อง

  • $แทนที่

    ธงบ่งชี้ความจำเป็นในการเปลี่ยนก่อนหน้านี้ ตั้งค่าสำหรับส่วนหัวที่ระบุ

ตัวอย่าง

wa()->getResponse()->addHeader("ประเภทเนื้อหา", "application/json");

งานสาธารณะ เพิ่มJs ($url, $app_id = เท็จ)

เพิ่ม URL ในรายการไฟล์ JavaScript URL ไฟล์ JavaScript ที่เพิ่มทั้งหมดสามารถเรียกค้นได้ในเทมเพลต Smarty โดยใช้วิธี ($wa->js())

ตัวเลือก

  • $url

    URL ของไฟล์ที่มีโค้ด JavaScript หากระบุค่าของพารามิเตอร์ $app_id ควรระบุ URL ของไฟล์โดยสัมพันธ์กับ URL ของไดเร็กทอรีที่มีไฟล์ของแอปพลิเคชันที่เกี่ยวข้อง มิฉะนั้น ควรระบุ URL แบบสัมพันธ์โดยสัมพันธ์กับไดเร็กทอรีการติดตั้งเฟรมเวิร์ก

  • $app_id

    รหัสแอปพลิเคชัน

ตัวอย่าง

วา()->getResponse()->addJs("js/myapp.js", "myapp");

งานสาธารณะ getCss ($html = จริง, $เข้มงวด = เท็จ)

ส่งคืนรายการลิงก์ไฟล์ CSS ที่เพิ่มไว้ก่อนหน้านี้

ตัวเลือก

  • $html

    แฟล็กระบุความจำเป็นในการส่งคืนโค้ด HTML สำหรับการเชื่อมต่อไฟล์ CSS หากระบุเป็นเท็จ วิธีการจะส่งกลับอาร์เรย์ของ URL สำหรับไฟล์ดังกล่าว

  • $เข้มงวด

    ตั้งค่าสถานะเพื่อใช้รูปแบบ XHTML แทน HTML เมื่อ $html ถูกตั้งค่าเป็นจริง

ตัวอย่าง

วา()->getResponse()->getCss();

งานสาธารณะ getHeader ($ชื่อ = โมฆะ)

ส่งกลับค่าของส่วนหัวการตอบกลับ

ตัวเลือก

  • $ชื่อ

    ID ของส่วนหัวซึ่งมีค่าที่จะถูกส่งกลับ หากไม่ได้ระบุไว้ วิธีการจะส่งกลับอาร์เรย์ส่วนหัวปัจจุบันทั้งหมด

ตัวอย่าง

wa()->getResponse()->addHeader("ประเภทเนื้อหา", "application/json"); wa()->getResponse()->getHeader("ประเภทเนื้อหา");

ผลลัพธ์

แอปพลิเคชัน/json

งานสาธารณะ รับจ ($html = จริง)

ส่งคืนรายการลิงก์ไฟล์ตอบกลับ JavaScript

ตัวเลือก

  • $html

    ธงทางเลือกที่บ่งชี้ถึงความจำเป็นในการส่งคืนโค้ด HTML สำหรับการเชื่อมต่อไฟล์ JavaScript มิฉะนั้นเมธอดจะส่งกลับอาร์เรย์ปัจจุบันของ URL ของไฟล์

ตัวอย่าง

วา()->getResponse()->getJs();

งานสาธารณะ getMeta ($ชื่อ = โมฆะ)

ส่งกลับเนื้อหาของข้อมูล META: ชื่อหน้า ("ชื่อ") คำหลักแท็ก META ("คำหลัก") คำอธิบาย ("คำอธิบาย")

ตัวเลือก

  • $ชื่อ

    ตัวระบุองค์ประกอบข้อมูล META ที่มีค่าที่จะถูกส่งกลับ หากไม่ได้ระบุไว้ วิธีการนี้จะส่งคืนอาร์เรย์ข้อมูล META ปัจจุบันทั้งหมด

ตัวอย่าง

วา()->getResponse()->getMeta("คำหลัก");

งานสาธารณะ รับสถานะ()

ส่งกลับสถานะการตอบสนองของเซิร์ฟเวอร์ที่ตั้งไว้ก่อนหน้านี้

ตัวอย่าง

วา()->getResponse()->setStatus(200); วา()->getResponse()->getStatus();

ผลลัพธ์

200

งานสาธารณะ getTitle()

ส่งกลับชื่อเรื่อง (TITLE) ของหน้า

ตัวอย่าง

wa()->getResponse()->setTitle("ร้านค้าออนไลน์ของฉัน"); วา()->getResponse()->getTitle();

ผลลัพธ์

ร้านค้าออนไลน์ของฉัน

งานสาธารณะ เปลี่ยนเส้นทาง ($url, $code = null)

เปลี่ยนเส้นทางผู้ใช้ไปยัง URL ที่ระบุ

ตัวเลือก

  • $url

    URL ที่ผู้ใช้ควรถูกเปลี่ยนเส้นทาง

  • $รหัส

    รหัสตอบกลับของเซิร์ฟเวอร์ที่ควรมาพร้อมกับการเปลี่ยนเส้นทาง

ตัวอย่าง

วา()->getResponse()->เปลี่ยนเส้นทาง("http://otherdomain.ru/", 301);

งานสาธารณะ sendHeaders()

ส่งส่วนหัวที่ตั้งไว้ก่อนหน้านี้

ตัวอย่าง

wa()->getResponse()->addHeader("ประเภทเนื้อหา", "application/json"); วา()->getResponse()->sendHeaders();

งานสาธารณะ ตั้งค่าคุกกี้ ($name, $value, $expire = null, $path = null, $domain = "", $secure = false, $http_only = false)

ตั้งค่าของรายการคุกกี้โดยใช้ฟังก์ชัน setcookie PHP

ตัวเลือก

  • $ชื่อ

    รหัสบันทึก

  • $value

    บันทึกมูลค่า

  • $หมดอายุ

    เวลาหมดอายุ

  • $เส้นทาง

    เส้นทางไปยัง URI "ไดเรกทอรีย่อย" ซึ่งค่าของรายการนั้นถูกต้อง

  • $โดเมน

    ชื่อโดเมนซึ่งค่าที่ป้อนนั้นถูกต้อง

  • $ปลอดภัย

    แฟล็กที่ระบุว่ารายการจะพร้อมใช้งานเฉพาะเมื่อมีการโอนค่าผ่านโปรโตคอล HTTPS

  • $http_เท่านั้น

    ธงที่ระบุว่าค่าบันทึกสามารถเข้าถึงได้ผ่านโปรโตคอล HTTP เท่านั้น และไม่สามารถเข้าถึงได้ผ่านสคริปต์ไคลเอ็นต์ (JavaScript)

ตัวอย่าง

wa()->getResponse()->setCookie("code", $code, time() + 30 * 86400, null, "", false, true);

งานสาธารณะ setMeta ($ชื่อ, $value = null)

ตั้งค่าข้อมูล META ค่านี้มีอยู่ในเทมเพลต Smarty โดยใช้วิธี ($wa->meta())

ตัวเลือก

  • $ชื่อ

    ตัวระบุองค์ประกอบข้อมูล META: ชื่อหน้า ("ชื่อ") คำสำคัญแท็ก META ("คำหลัก") และคำอธิบาย ("คำอธิบาย")

  • $value

    ค่าองค์ประกอบ

ตัวอย่าง

wa()->getResponse()->setMeta("คำหลัก", $คำหลัก);

งานสาธารณะ ตั้งค่าสถานะ ($รหัส)

ตั้งค่าสถานะการตอบสนองของเซิร์ฟเวอร์

ตัวเลือก

  • $รหัส

    รหัสสถานะ

ตัวอย่าง

วา()->getResponse()->setStatus(404);

งานสาธารณะ ตั้งชื่อเรื่อง ($หัวเรื่อง)

ตั้งชื่อเรื่อง (TITLE) ของเพจ เนื้อหาชื่อเรื่องมีอยู่ในเทมเพลต Smarty โดยใช้วิธี ($wa->title())

สมมติว่าเราจำเป็นต้องได้รับข้อมูลจากเว็บไซต์ ซึ่งการรวบรวมข้อมูลด้วยตนเองนั้นทำไม่ได้ในทางปฏิบัติหรือเป็นไปไม่ได้เนื่องจากมีปริมาณข้อมูลมาก ในกรณีนี้ เราสามารถทำให้กระบวนการเป็นอัตโนมัติโดยใช้เครื่องมือที่อธิบายไว้ด้านล่าง

ขอห้องสมุด

ไลบรารี Python สำหรับส่งคำขอไปยังเซิร์ฟเวอร์และประมวลผลการตอบสนอง รากฐานของสคริปต์แยกวิเคราะห์และอาวุธหลักของเรา การใช้ไลบรารีนี้ทำให้เราได้รับเนื้อหาของหน้า แบบฟอร์ม HTMLเพื่อแยกวิเคราะห์เพิ่มเติม

การตอบสนองคำขอนำเข้า = คำขอ get ("https://ya.ru") # get-request พิมพ์ (ตอบกลับ . ข้อความ ) #เนื้อหาหน้าเอาท์พุท payload = ( "key1" : "value1" , "key2" : "value2") การตอบสนอง = คำขอ รับ ("http://httpbin.org/get" , params = เพย์โหลด ) #คำขอพร้อมพารามิเตอร์ headers = ( "user-agent" : "my-app/0.0.1" ) response = คำขอ รับ (url, ส่วนหัว = ส่วนหัว) # คำขอพร้อมส่วนหัว html เฉพาะ

เอพีไอ

อินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชัน - อินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชันจัดทำโดยเจ้าของแอปพลิเคชันเว็บสำหรับนักพัฒนารายอื่น การไม่มี API ที่สามารถตอบสนองความต้องการของเราได้คือสิ่งแรกที่เราควรตรวจสอบให้แน่ใจก่อนที่จะรีบวิเคราะห์ซอร์สโค้ดของเพจและเขียน parser สำหรับมัน ไซต์ยอดนิยมหลายแห่งมี API และเอกสารประกอบของตัวเองที่อธิบายวิธีใช้งาน เราสามารถใช้ API ในลักษณะนี้ - เราสร้างคำขอ http ตามเอกสารประกอบ และรับการตอบกลับโดยใช้คำขอ

บีเอส4

Beautifulsoup4 เป็นไลบรารีสำหรับแยกวิเคราะห์ html และ เอกสาร xml- ช่วยให้คุณเข้าถึงเนื้อหาของแท็กใดๆ ใน html ได้โดยตรง

จาก bs4 import BeautifulSoupซุป = BeautifulSoup (raw_html, "html.parser" ) พิมพ์ (soup . find ( "p" , class_ = "some-class" ) . text ) # ส่งออกเนื้อหาของแท็ก "p" โดยใช้คลาส "some-class"

ไดร์เวอร์เว็บซีลีเนียม

ข้อมูลบนไซต์สามารถสร้างได้แบบไดนามิกโดยใช้จาวาสคริปต์ ในกรณีนี้ จะไม่สามารถแยกวิเคราะห์ข้อมูลนี้โดยใช้ request+bs4 ได้ ความจริงก็คือ bs4 แยกวิเคราะห์ซอร์สโค้ดของเพจโดยไม่ต้องรัน js ในการรันโค้ด js และรับหน้าที่เหมือนกับที่เราเห็นในเบราว์เซอร์ คุณสามารถใช้ซีลีเนียมเว็บไดรเวอร์ - นี่คือชุดไดรเวอร์สำหรับ เบราว์เซอร์ที่แตกต่างกันมาพร้อมกับไลบรารีสำหรับการทำงานกับไดรเวอร์เหล่านี้

จะทำอย่างไรถ้าได้รับอนุญาต?

session = request.Session() data = ("login_username":login", "login_password": "รหัสผ่าน") url = "http://site.com/login.php" การตอบสนอง = session.post (url, data =ข้อมูล)

จะเกิดอะไรขึ้นหากไซต์แบนคุณสำหรับคำขอมากเกินไป?

  • ตั้งค่าความล่าช้าระหว่างคำขอ:

การตอบสนอง = request.get (url, หมดเวลา = (10, 0.01)) # หมดเวลาการเชื่อมต่อ, หมดเวลาการอ่าน (เป็นวินาที)

  • แกล้งทำเป็นเบราว์เซอร์โดยใช้ไดรเวอร์เว็บซีลีเนียมหรือส่งเนื้อหาของส่วนหัวของตัวแทนผู้ใช้เพื่อสร้างคำขอ:

user_agent = ("Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:50.0) " "Gecko/20100101 Firefox/50.0") คำขอ =ร้องขอ.get(url, headers=("User-Agent":user_agent))

  • ใช้พร็อกซี:

การสร้างการตอบสนองจากผู้ควบคุม

หลังจากที่คอนโทรลเลอร์ประมวลผลคำขอเสร็จแล้ว โดยปกติจะต้องสร้างการตอบกลับ เมื่อเราสร้างคอนโทรลเลอร์ระดับต่ำโดยใช้อินเทอร์เฟซ IController โดยตรง เราต้องรับผิดชอบทุกแง่มุมของการประมวลผลคำขอ รวมถึงการสร้างการตอบสนองต่อไคลเอนต์

ตัวอย่างเช่น หากต้องการส่งการตอบกลับ HTML คุณจะต้องสร้างและเขียนข้อมูล HTML จากนั้นส่งไปยังไคลเอนต์โดยใช้เมธอด Response.Write() ในทำนองเดียวกัน หากต้องการเปลี่ยนเส้นทางเบราว์เซอร์ของผู้ใช้ไปยัง URL อื่น คุณจะต้องเรียกใช้เมธอด Response.Redirect() และส่งผ่าน URL ที่ต้องการ ทั้งสองวิธีแสดงให้เห็นในโค้ดด้านล่าง ซึ่งแสดงส่วนขยายของคลาส BasicController ที่เราสร้างขึ้นในบทความก่อนหน้านี้โดยใช้อินเทอร์เฟซ IController:

ใช้ System.Web.Mvc; โดยใช้ System.Web.Routing; Namespace ControllersAndActions.Controllers (คลาสสาธารณะ BasicController: IController ( public void Execute(RequestContext requestContext) ( string controller = (string)requestContext.RouteData.Values["controller"]; string action = (string)requestContext.RouteData.Values["action "]; if (action.ToLower() == "redirect") ( requestContext.HttpContext.Response.Redirect("/Derived/Index"); ) else ( requestContext.HttpContext.Response.Write(string.Format("Controller) : (0), วิธีการดำเนินการ: (1)", ตัวควบคุม, การกระทำ)); ) ) ) )

วิธีการเดียวกันนี้สามารถนำไปใช้ในกรณีที่สืบทอดคอนโทรลเลอร์จากคลาสคอนโทรลเลอร์ คลาส HttpResponseBase ซึ่งส่งคืนเมื่อคุณสมบัติ requestContext.HttpContext.Response ถูกอ่านในเมธอด Execute() สามารถเข้าถึงได้ผ่านคุณสมบัติ Controller.Response ดังที่แสดงในตัวอย่างด้านล่าง ซึ่งขยายคลาส DerivedController ที่สร้างขึ้นก่อนหน้านี้ด้วย สืบทอดมาจากคลาสคอนโทรลเลอร์:

การใช้ระบบ; ใช้ System.Web; ใช้ System.Web.Mvc; Namespace ControllersAndActions.Controllers ( คลาสสาธารณะ DerivedController: คอนโทรลเลอร์ ( สาธารณะ ActionResult Index() ( // ... ) โมฆะสาธารณะ ProduceOutput() ( ถ้า (Server.MachineName == "ProfessorWeb") Response.Redirect("/Basic/Index" ); else Response.Write ("ตัวควบคุม: ได้มา, วิธีการดำเนินการ: ProduceOutput");

เมธอด ProduceOutput() ใช้ค่าของคุณสมบัติ Server.MachineName เพื่อตัดสินใจว่าจะส่งการตอบสนองใดไปยังไคลเอนต์ ("ProfessorWeb" คือชื่อของเครื่องที่กำลังพัฒนาของฉัน)

แม้ว่าวิธีการสร้างการตอบสนองต่อผู้ใช้นี้จะได้ผล แต่ก็มีปัญหาหลายประการ:

    คลาสคอนโทรลเลอร์ต้องมีข้อมูลโครงสร้าง HTML หรือ URL ซึ่งทำให้คลาสอ่านและบำรุงรักษาได้ยาก

    คอนโทรลเลอร์ที่สร้างการตอบสนองต่อเอาต์พุตโดยตรงนั้นยากต่อการทดสอบหน่วย คุณจะต้องสร้างการใช้งานจำลองของออบเจ็กต์ Response จากนั้นจึงจะสามารถประมวลผลเอาต์พุตจากคอนโทรลเลอร์เพื่อพิจารณาว่าคืออะไร ซึ่งอาจหมายถึง เช่น จำเป็นต้องแยกวิเคราะห์มาร์กอัป HTML คำหลักซึ่งเป็นกระบวนการที่ยาวนานและน่าเบื่อหน่าย

    การประมวลผลรายละเอียดเล็กๆ น้อยๆ ของแต่ละคำตอบในลักษณะนี้มีความซับซ้อนและเกิดข้อผิดพลาดได้ง่าย โปรแกรมเมอร์บางคนชอบการควบคุมแบบสัมบูรณ์โดยการสร้างคอนโทรลเลอร์ระดับต่ำ แต่มักจะซับซ้อนอย่างรวดเร็ว

โชคดีที่ MVC Framework มีเครื่องมือที่มีประโยชน์ซึ่งช่วยแก้ปัญหาเหล่านี้ทั้งหมดได้ ซึ่งก็คือผลลัพธ์ของการดำเนินการ ส่วนต่อไปนี้จะอธิบายแนวคิดของผลลัพธ์ของการดำเนินการและแสดง วิธีต่างๆใช้เพื่อสร้างการตอบสนองจากผู้ควบคุม

ผลลัพธ์ของการกระทำ

ผลลัพธ์การดำเนินการในกรอบงาน MVC ใช้เพื่อแยกข้อความแสดงเจตจำนงออกจากการดำเนินการตามเจตนา (ขออภัยที่ซ้ำซาก) แนวคิดนี้จะดูเรียบง่ายเมื่อคุณเข้าใจแล้ว แต่อาจต้องใช้เวลาพอสมควรในการทำความเข้าใจเนื่องจากมีบางอย่างทางอ้อม

แทนที่จะจัดการโดยตรงกับวัตถุ Response วิธีการกระทำจะส่งกลับวัตถุของคลาสที่ได้รับมา ผลการดำเนินการซึ่งอธิบายว่าการตอบสนองจากคอนโทรลเลอร์ควรเป็นอย่างไร เช่น เรนเดอร์มุมมองหรือเปลี่ยนเส้นทางไปยัง URL อื่นหรือวิธีดำเนินการ อย่างไรก็ตาม (นี่คือความอ้อมมาก) คำตอบไม่ได้ถูกสร้างขึ้นโดยตรง แต่วัตถุ ActionResult จะถูกสร้างขึ้นแทน ซึ่ง MVC Framework ประมวลผลเพื่อสร้างผลลัพธ์หลังจากเรียกใช้วิธีการดำเนินการแล้ว

ระบบผลลัพธ์การดำเนินการเป็นตัวอย่างของรูปแบบการออกแบบคำสั่ง รูปแบบนี้แสดงถึงสถานการณ์ที่คุณจัดเก็บและส่งวัตถุที่อธิบายการดำเนินการที่กำลังดำเนินการ

เมื่อ MVC Framework ได้รับวัตถุ ActionResult จากวิธีการดำเนินการ มันจะเรียก วิธีการ ExecuteResult()กำหนดไว้ในคลาสของวัตถุนี้ จากนั้นการนำผลลัพธ์ของการดำเนินการไปใช้จะดำเนินการบนออบเจ็กต์ Response โดยสร้างผลลัพธ์ที่ตรงกับเจตนาของคุณ เพื่อสาธิตการใช้งานจริง เรามาสร้างโฟลเดอร์ Infrastructure และเพิ่มเข้าไป ไฟล์ใหม่คลาสชื่อ CustomRedirectResult.cs พร้อมการใช้งาน ActionResult แบบกำหนดเองที่แสดงในตัวอย่างด้านล่าง:

ใช้ System.Web.Mvc; Namespace ControllersAndActions.Infrastructure (คลาสสาธารณะ CustomRedirectResult: ActionResult ( Url สตริงสาธารณะ ( get; set; ) การแทนที่สาธารณะเป็นโมฆะ ExecuteResult (บริบทของ ControllerContext) ( string fullUrl = UrlHelper.GenerateContentUrl (Url, context.HttpContext); context.HttpContext.Response.Redirect (URL แบบเต็ม);

คลาสนี้ขึ้นอยู่กับวิธีการทำงานของคลาส System.Web.Mvc.RedirectResult ข้อดีประการหนึ่งของ MVC Framework แบบโอเพ่นซอร์สคือความสามารถในการสำรวจ งานภายในอะไรก็ตาม. คลาส CustomRedirectResult นั้นง่ายกว่า MVC ที่เทียบเท่ากันมาก แต่ก็เพียงพอสำหรับวัตถุประสงค์ของบทความนี้

เมื่อสร้างอินสแตนซ์คลาส RedirectResult เราจะส่ง URL ที่ควรเปลี่ยนเส้นทางผู้ใช้ไป เมธอด ExecuteResult() ซึ่งจะถูกดำเนินการโดย MVC Framework เมื่อวิธีการดำเนินการเสร็จสมบูรณ์ ได้รับอ็อบเจ็กต์ Response สำหรับการร้องขอผ่านอ็อบเจ็กต์ ControllerContext ที่ให้มาของ Framework และเรียกเมธอด RedirectPermanent() หรือเมธอด Redirect() (นี่คือ สิ่งที่ทำไปแล้วในการใช้งาน IController ระดับต่ำในตัวอย่างก่อนหน้าในบทความ)

การใช้คลาส CustomRedirectResult แสดงในตัวอย่างด้านล่าง ซึ่งแสดงการเปลี่ยนแปลงที่เกิดขึ้นกับ Derived controller:

// ... ใช้ ControllersAndActions.Infrastructure; namespace ControllersAndActions.Controllers ( คลาสสาธารณะ DerivedController: คอนโทรลเลอร์ ( สาธารณะ ActionResult Index() ( // ... ) สาธารณะ ActionResult ProduceOutput() ( ถ้า (Server.MachineName == "MyMachineName") ส่งคืน CustomRedirectResult ใหม่ ( Url = "/Basic/ ดัชนี" ); else ( Response.Write("Controller: Derived, Action method: ProduceOutput"); return null; ) ) ) )

โปรดทราบว่าเราถูกบังคับให้เปลี่ยนผลลัพธ์ของวิธีการดำเนินการเพื่อส่งคืน ActionResult เราจะคืนค่า null หากเราไม่ต้องการให้ MVC Framework ดำเนินการใดๆ เมื่อดำเนินการตามวิธีดำเนินการ ซึ่งเป็นสิ่งที่เราทำหากอินสแตนซ์ CustomRedirectResult ไม่ถูกส่งคืน

ตัวควบคุมการทดสอบหน่วยและการดำเนินการ

MVC Framework หลายส่วนได้รับการออกแบบมาเพื่อให้การทดสอบหน่วยง่ายขึ้น โดยเฉพาะอย่างยิ่งกับการดำเนินการและตัวควบคุม มีสาเหตุหลายประการสำหรับการสนับสนุนนี้:

    คุณสามารถทดสอบการดำเนินการและตัวควบคุมภายนอกเว็บเซิร์ฟเวอร์ได้ ออบเจ็กต์บริบทเข้าถึงได้ผ่านคลาสพื้นฐาน (เช่น HttpRequestBase) ซึ่งจำลองได้ง่าย

    หากต้องการทดสอบผลลัพธ์ของวิธีดำเนินการ คุณไม่จำเป็นต้องแยกวิเคราะห์มาร์กอัป HTML เพื่อให้แน่ใจว่าคุณได้รับผลลัพธ์ตามที่คาดหวัง คุณสามารถตรวจสอบออบเจ็กต์ ActionResult ที่ส่งคืนได้

    ไม่จำเป็นต้องจำลองคำขอของลูกค้า ระบบการเชื่อมโยงโมเดลของ MVC Framework ช่วยให้คุณสามารถเขียนวิธีดำเนินการที่รับอินพุตในพารามิเตอร์ได้ หากต้องการทดสอบวิธีดำเนินการ คุณเพียงแค่เรียกมันโดยตรงและระบุ ค่าที่สอดคล้องกันพารามิเตอร์

บทความในอนาคตเกี่ยวกับการสร้างข้อมูลจากคอนโทรลเลอร์จะแสดงวิธีสร้างการทดสอบหน่วย ประเภทต่างๆผลลัพธ์ของการกระทำ

อย่าลืมว่าการทดสอบหน่วยเป็นเพียงส่วนหนึ่งของภาพเท่านั้น ลักษณะการทำงานที่ซับซ้อนในแอปพลิเคชันเกิดขึ้นเมื่อเรียกใช้วิธีดำเนินการตามลำดับ การทดสอบหน่วยจะทำงานได้ดีที่สุดเมื่อรวมกับวิธีการทดสอบอื่นๆ

ตอนนี้คุณรู้แล้วว่าผลลัพธ์พิเศษของการดำเนินการเปลี่ยนเส้นทางทำงานอย่างไร คุณสามารถเปลี่ยนไปใช้สิ่งที่เทียบเท่ากับกรอบงาน MVC ซึ่งมีประสิทธิภาพมากกว่าและได้รับการทดสอบอย่างละเอียดโดย Microsoft การเปลี่ยนแปลงที่จำเป็นใน Derived controller มีดังต่อไปนี้:

// ... สาธารณะ ActionResult ProduceOutput() ( ส่งคืน RedirectResult ใหม่ ("/Basic/Index"); ) // ...

คำสั่งแบบมีเงื่อนไขถูกลบออกจากวิธีดำเนินการแล้ว ซึ่งหมายความว่าหลังจากเรียกใช้แอปพลิเคชันและนำทางไปยัง URL เช่น /Derived/ProduceOutput เบราว์เซอร์จะถูกเปลี่ยนเส้นทางไปยัง URL เช่น /Basic/Index เพื่อลดความซับซ้อนของโค้ดวิธีดำเนินการ คลาสคอนโทรลเลอร์จะรวมวิธีการสร้างที่สะดวกสบายไว้ด้วย ประเภทต่างๆออบเจ็กต์ผลการดำเนินการ ตัวอย่างเช่น เราสามารถบรรลุผลแบบเดียวกับในตัวอย่างข้างต้นได้โดยการส่งคืนผลลัพธ์ของเมธอด Redirect():

// ... สาธารณะ ActionResult ProduceOutput() ( return Redirect("/Basic/Index"); ) // ...

ไม่มีอะไรซับซ้อนเป็นพิเศษเกี่ยวกับระบบผลลัพธ์ของการดำเนินการ แต่ท้ายที่สุดแล้วจะช่วยสร้างโค้ดที่เรียบง่ายขึ้น สะอาดกว่า และสอดคล้องกันมากขึ้น ซึ่งอ่านง่ายและทดสอบหน่วยได้ ตัวอย่างเช่น ในกรณีของการเปลี่ยนเส้นทาง คุณสามารถตรวจสอบว่าวิธีดำเนินการส่งคืนอินสแตนซ์ RedirectResult ซึ่งมีคุณสมบัติ Url มีเป้าหมายที่คาดหวังไว้หรือไม่

กรอบงาน MVC กำหนดประเภทผลลัพธ์การดำเนินการในตัวหลายประเภท ซึ่งอธิบายไว้ในตารางด้านล่าง:

ประเภท ActionResult ในตัว
พิมพ์ คำอธิบาย วิธีการช่วยเหลือของคลาสคอนโทรลเลอร์
ดูผลลัพธ์

แสดงผลเทมเพลตมุมมองที่ระบุหรือมาตรฐาน

ดู()
ผลลัพธ์มุมมองบางส่วน

แสดงผลเทมเพลตมุมมองบางส่วนที่ระบุหรือมาตรฐาน

มุมมองบางส่วน()
เปลี่ยนเส้นทางไปยังRouteResult

ออก HTTP 301 หรือ 302 เปลี่ยนเส้นทางไปยังวิธีดำเนินการหรือรายการเส้นทางที่ระบุ สร้าง URL ตามการกำหนดค่าเส้นทาง

เปลี่ยนเส้นทางไปยังการดำเนินการ()
เปลี่ยนเส้นทางไปยังการดำเนินการถาวร ()
เปลี่ยนเส้นทางไปยังเส้นทาง()
เปลี่ยนเส้นทางไปยังเส้นทางถาวร()
ผลลัพธ์การเปลี่ยนเส้นทาง

ออก HTTP 301 หรือ 302 เปลี่ยนเส้นทางไปยัง URL ที่กำหนด

เปลี่ยนเส้นทาง()
เปลี่ยนเส้นทางถาวร()
ผลลัพธ์ของเนื้อหา

ส่งคืนข้อมูลข้อความที่ไม่ได้จัดรูปแบบไปยังเบราว์เซอร์ โดยตั้งค่าส่วนหัวของประเภทเนื้อหาเพิ่มเติม

เนื้อหา()
ไฟล์ผลลัพธ์

ถ่ายโอนข้อมูลไบนารี (เช่น ไฟล์บนดิสก์หรืออาร์เรย์ไบต์ในหน่วยความจำ) ไปยังเบราว์เซอร์โดยตรง

ไฟล์()
JsonResult

ทำให้ออบเจ็กต์ .NET เป็นอนุกรมลงใน JSON และส่งเป็นการตอบกลับ การตอบสนองประเภทนี้มักถูกสร้างขึ้นเมื่อใช้เครื่องมือ Web API และ AJAX

เจสัน()
JavaScriptResult

ส่งซอร์สโค้ด JavaScript บางส่วนเพื่อให้เบราว์เซอร์ดำเนินการ

จาวาสคริปต์()
ผลลัพธ์ที่ไม่ได้รับอนุญาต Http

ตั้งค่ารหัสสถานะการตอบสนอง HTTP เป็น 401 (หมายถึง "ไม่ได้รับอนุญาต") ซึ่งจะบังคับให้กลไกการตรวจสอบความถูกต้องมีผล (การตรวจสอบความถูกต้องของแบบฟอร์มหรือ การรับรองความถูกต้องของ Windows) เชิญผู้เยี่ยมชมให้เข้าสู่ระบบ

เลขที่
HttpNotFoundResult

ส่งกลับรหัสข้อผิดพลาด HTTP 404 - ไม่พบ

HttpNotFound()
ผลลัพธ์ HttpStatusCode

ส่งคืนรหัส HTTP ที่ระบุ

เลขที่
ผลว่างเปล่า

ไม่ทำอะไรเลย

เลขที่

ประเภทเหล่านี้ทั้งหมดได้มาจากคลาส ActionResult และหลายประเภทมีวิธีการช่วยเหลือที่สะดวกในคลาส Controller เราจะสาธิตการใช้ผลลัพธ์ประเภทเหล่านี้ในบทความต่อๆ ไป

หลังจากได้รับและตีความข้อความร้องขอแล้ว เซิร์ฟเวอร์จะตอบกลับด้วยข้อความตอบกลับ HTTP:

  • บรรทัดสถานะ
  • ช่องส่วนหัวเป็นศูนย์หรือมากกว่า (ทั่วไป|การตอบสนอง|เอนทิตี) ตามด้วย CRLF
  • บรรทัดว่าง (เช่น บรรทัดที่ไม่มีสิ่งใดอยู่ข้างหน้า CRLF) ระบุจุดสิ้นสุดของฟิลด์ส่วนหัว
  • เนื้อหาข้อความหรือไม่ก็ได้
  • ส่วนต่อไปนี้แต่ละส่วนจะอธิบายเกี่ยวกับเอนทิตีที่ใช้ในข้อความตอบกลับ HTTP

    สถานะข้อความ-บรรทัด

    Status-Line ประกอบด้วยเวอร์ชันโปรโตคอลตามด้วยรหัสสถานะตัวเลขและข้อความที่เกี่ยวข้อง องค์ประกอบจะถูกคั่นด้วยอักขระ SP ช่องว่าง

สถานะบรรทัด = HTTP-เวอร์ชัน SP สถานะรหัส SP เหตุผล-วลี CRLF

เวอร์ชัน HTTP

เซิร์ฟเวอร์ที่รองรับ HTTP เวอร์ชัน 1.1 จะส่งคืนข้อมูลเวอร์ชันต่อไปนี้:

HTTP-เวอร์ชัน = HTTP/1.1

รหัสสถานะ

องค์ประกอบรหัสสถานะเป็นจำนวนเต็ม 3 หลัก โดยที่หลักแรกของรหัสสถานะจะกำหนดคลาสของการตอบสนอง และตัวเลขสองหลักสุดท้ายไม่มีบทบาทในการจัดหมวดหมู่ หลักแรกมี 5 ค่า:

เอส.เอ็น. รหัสและคำอธิบาย
1 1xx: ข้อมูล

หมายความว่าได้รับคำขอแล้วและกระบวนการกำลังดำเนินต่อไป

2 2xx: สำเร็จ

หมายความว่าการดำเนินการได้รับ เข้าใจ และยอมรับเรียบร้อยแล้ว

3 3xx: การเปลี่ยนเส้นทาง

หมายความว่าจะต้องดำเนินการเพิ่มเติมเพื่อดำเนินการตามคำขอให้เสร็จสิ้น

4 4xx: ข้อผิดพลาดของไคลเอ็นต์

หมายความว่าคำขอมีไวยากรณ์ที่ไม่ถูกต้องหรือไม่สามารถดำเนินการได้

5 5xx: ข้อผิดพลาดของเซิร์ฟเวอร์

หมายความว่าเซิร์ฟเวอร์ไม่สามารถตอบสนองคำขอที่ถูกต้องได้

รหัสสถานะ HTTP สามารถขยายได้ และแอปพลิเคชัน HTTP ไม่จำเป็นต้องเข้าใจความหมายของรหัสสถานะที่ลงทะเบียนทั้งหมด รายการรหัสสถานะทั้งหมดได้รับการระบุไว้ในบทแยกต่างหากเพื่อเป็นข้อมูลอ้างอิงของคุณ

ฟิลด์ส่วนหัวการตอบกลับ

เราจะศึกษา General-header และ Entity-header ในบทที่แยกต่างหาก เมื่อเราจะเรียนรู้ฟิลด์ส่วนหัว HTTP ในตอนนี้ เรามาตรวจสอบว่าฟิลด์ส่วนหัวของการตอบกลับคืออะไร

ฟิลด์ส่วนหัวการตอบกลับอนุญาตให้เซิร์ฟเวอร์ส่งข้อมูลเพิ่มเติมเกี่ยวกับการตอบกลับที่ไม่สามารถวางในบรรทัดสถานะ ฟิลด์ส่วนหัวเหล่านี้ให้ข้อมูลเกี่ยวกับเซิร์ฟเวอร์และการเข้าถึงทรัพยากรเพิ่มเติมที่ระบุโดย Request-URI

  • พร็อกซี-รับรองความถูกต้อง

  • WWW-รับรองความถูกต้อง

คุณสามารถแนะนำฟิลด์ที่คุณกำหนดเองได้ในกรณีที่คุณกำลังจะเขียนเว็บไคลเอ็นต์และเซิร์ฟเวอร์ที่คุณกำหนดเอง

ตัวอย่างข้อความตอบกลับ

ตอนนี้เรามารวบรวมทั้งหมดเข้าด้วยกันเพื่อสร้างการตอบสนอง HTTP สำหรับคำขอเพื่อดึงข้อมูล สวัสดี.htmหน้าจากเว็บเซิร์ฟเวอร์ที่ทำงานบนไซต์

HTTP/1.1 200 ตกลง วันที่: จันทร์ 27 ก.ค. 2552 12:28:53 GMT เซิร์ฟเวอร์: Apache/2.2.14 (Win32) แก้ไขล่าสุด: พุธ 22 ก.ค. 2552 19:15:56 GMT ความยาวเนื้อหา: 88 เนื้อหา - ประเภท: ข้อความ/html การเชื่อมต่อ: ปิด

สวัสดีชาวโลก!

ตัวอย่างต่อไปนี้แสดงข้อความตอบกลับ HTTP ที่แสดงเงื่อนไขข้อผิดพลาดเมื่อเว็บเซิร์ฟเวอร์ไม่พบหน้าที่ร้องขอ:

HTTP/1.1 404 ไม่พบ วันที่: อาทิตย์ 18 ต.ค. 2555 เวลา 10:36:20 น. GMT เซิร์ฟเวอร์: Apache/2.2.14 (Win32) ความยาวเนื้อหา: 230 การเชื่อมต่อ: ปิดประเภทเนื้อหา: ข้อความ / html; ชุดอักขระ=iso-8859-1 404 ไม่พบ

ไม่พบ

ไม่พบ URL ที่ร้องขอ /t.html บนเซิร์ฟเวอร์นี้

ต่อไปนี้เป็นตัวอย่างของข้อความตอบกลับ HTTP ที่แสดงเงื่อนไขข้อผิดพลาดเมื่อเว็บเซิร์ฟเวอร์พบเวอร์ชัน HTTP ที่ไม่ถูกต้องในคำขอ HTTP ที่กำหนด:

HTTP/1.1 400 วันที่คำขอไม่ถูกต้อง: อาทิตย์ 18 ต.ค. 2555 เวลา 10:36:20 น. GMT เซิร์ฟเวอร์: Apache/2.2.14 (Win32) ความยาวเนื้อหา: 230 ประเภทเนื้อหา: ข้อความ / html; charset=iso-8859-1 การเชื่อมต่อ: ปิด 400 คำขอไม่ถูกต้อง

คำขอไม่ถูกต้อง

เบราว์เซอร์ของคุณส่งคำขอว่าเซิร์ฟเวอร์นี้ไม่สามารถเข้าใจได้

บรรทัดคำขอมีอักขระที่ไม่ถูกต้องตามสตริงโปรโตคอล

วัตถุที่อธิบายเป็นเครื่องมือที่มีประโยชน์และทรงพลังมาก วัตถุนี้มีหลายวิธี คำอธิบายมีดังต่อไปนี้:

คอลเลกชัน:

วิธีการ:

คุณสมบัติ:

การตอบสนองคอลเลกชันคุกกี้

คอลเลกชันคุกกี้จะกำหนดค่าให้กับคุกกี้ หากไม่มีคุกกี้ที่ระบุ ระบบจะสร้างคุกกี้ขึ้นมา หากมีคุกกี้อยู่ คุกกี้จะใช้ค่าใหม่และทำลายคุกกี้เก่า

Response.Cookies(คุกกี้) [(คีย์) | - คุณลักษณะ ] = ค่า

พารามิเตอร์:

  • คุกกี้- ชื่อคุกกี้
  • สำคัญ- พารามิเตอร์ทางเลือก หากมีการระบุ คุกกี้จะเป็นไดเร็กทอรี (ซ้อนกัน) และคีย์คือชุดของค่า
  • คุณลักษณะ- ข้อมูลที่ระบุเกี่ยวกับคุกกี้นั้นเอง พารามิเตอร์นี้สามารถเป็นหนึ่งในสิ่งต่อไปนี้:
  • ความหมาย- ระบุค่าที่จะกำหนด กุญแจนี้หรือคุณลักษณะ
ชื่อคำอธิบาย
โดเมนการบันทึกเท่านั้น หากระบุไว้ คุกกี้จะถูกส่งเมื่อมีการร้องขอจากโดเมนนี้เท่านั้น
หมดอายุการบันทึกเท่านั้น วันที่คุกกี้หมดอายุ ต้องตั้งค่าวันที่นี้จึงจะเขียนคุกกี้ถึงไคลเอนต์ได้ ฮาร์ดไดรฟ์หลังจากสิ้นสุดเซสชั่น หากไม่ได้ตั้งค่าแอตทริบิวต์นี้ วันที่หมดอายุของคุกกี้จะถือว่าเป็นวันที่ปัจจุบัน คุกกี้จะหมดอายุทันทีหลังจากสิ้นสุดเซสชัน
ฮาสคีย์อ่านอย่างเดียว บ่งชี้ว่าคุกกี้มีรหัสที่กำหนดหรือไม่
เส้นทางการบันทึกเท่านั้น หากระบุไว้ คุกกี้จะถูกส่งเมื่อมีการร้องขอจากเส้นทางนี้เท่านั้น หากไม่ได้ตั้งค่าพารามิเตอร์ ระบบจะใช้เส้นทางไปยังแอปพลิเคชัน
ปลอดภัยการบันทึกเท่านั้น ระบุว่าคุกกี้จะได้รับการคุ้มครองหรือไม่

ความคิดเห็น:

หากคีย์คุกกี้ถูกสร้างขึ้นตามที่แสดงในสคริปต์ต่อไปนี้

<% Response.Cookies("mycookie")("type1") = "сахар" Response.Cookies("mycookie")("type2") = "печенье" %>

จากนั้นส่วนหัวต่อไปนี้จะถูกส่ง:

ชุดคุกกี้:MYCOOKIE=TYPE1=sugar&TYPE2=cookies

หากคุณกำหนดค่าให้กับ mycookie โดยไม่ใช้คีย์ การดำเนินการนี้จะทำลายคีย์ type1 และ type2 ตัวอย่างเช่น:<% Response.Cookies("myCookie") = "шоколадный зефир" %>

ในตัวอย่างก่อนหน้านี้ คีย์ type1 และ type2 จะถูกทำลายและค่าของมันจะหายไป ตอนนี้ Mycookie จะมีมาร์ชแมลโลว์ช็อคโกแลตที่มีคุณค่า

คุณยังสามารถตรวจสอบการมีอยู่ของคีย์เฉพาะได้ด้วยวิธีต่อไปนี้:

<% = Response.Cookies("myCookie").HasKeys %>

หากแสดง TRUE แสดงว่าคีย์ดังกล่าวมีอยู่ หากเป็น FALSE จะไม่มี

การตอบสนองวิธีการเขียน

การตอบสนองเขียนตัวแปร_หรือ_ค่า

พารามิเตอร์:

  • ตัวแปร_หรือ_ค่า- ข้อมูลที่จะแสดงบนหน้าจอเบราว์เซอร์ผ่าน HTML พารามิเตอร์นี้สามารถเป็นประเภทใดก็ได้ที่ VisualBasic Scripting Edition รองรับ นั่นคือข้อมูลสามารถเป็นประเภทต่อไปนี้: วันที่, สตริง, ตัวอักษร, ค่าตัวเลข ความหมาย พารามิเตอร์นี้ไม่สามารถมี %> ชุดค่าผสมได้ คุณสามารถใช้ชุดค่าผสมที่เทียบเท่า %\> แทนได้ เว็บเซิร์ฟเวอร์จะแปลงลำดับนี้เป็นลำดับที่จำเป็นเมื่อเรียกใช้สคริปต์

ตัวอย่างต่อไปนี้แสดงวิธีการทำงานของเมธอด Response.write เพื่อส่งข้อความไปยังไคลเอนต์

ฉันจะบอกคุณว่า:<%Response.write "Привет всем!!!"%>และชื่อของคุณ<%Response.write(Request.Form("name"))%>

ตัวอย่างต่อไปนี้เพิ่มแท็ก HTML ให้กับหน้าเว็บ เนื่องจากวิธีนี้ไม่สามารถมีชุดค่าผสม %> ได้ เราจึงใช้ลำดับ %\> ดังนั้นสคริปต์ตัวอย่าง:

<% Response.write "

" %>

ผลลัพธ์จะเป็นบรรทัด:

การตอบสนองวิธีการเปลี่ยนเส้นทาง

Response.Redirect URL (URL - ตัวระบุทรัพยากรที่เหมือนกัน)

พารามิเตอร์:

  • URL- พารามิเตอร์เป็นตัวอธิบายทรัพยากรสากล มันจะแสดงเมื่อเบราว์เซอร์จำเป็นต้องเปลี่ยนเส้นทาง

ความคิดเห็น:

เกิดขึ้นใดๆ วิธีนี้ระหว่างแท็ก และหน้าเว็บจะถูกละเว้น วิธีการนี้สามารถใช้ได้เฉพาะในส่วนหัวของหน้า HTML เท่านั้น วิธีการนี้จะส่งส่วนหัวไปยังเบราว์เซอร์ถ้าพารามิเตอร์ URL ของวัตถุนี้หายไปในรูปแบบต่อไปนี้:

HTTP/1.0 302 วัตถุย้าย URL ตำแหน่ง

การตอบสนองวิธีการสิ้นสุด

การตอบสนองสิ้นสุด

ความคิดเห็น:

หากคุณสมบัติ Response.Buffer ถูกตั้งค่าเป็น TRUE การเรียกใช้เมธอด Response.End จะล้างบัฟเฟอร์ โดยส่งข้อมูลออกจากบัฟเฟอร์ไปยังไคลเอนต์ หากคุณไม่ต้องการส่งข้อมูลออกไปยังผู้ใช้ คุณควรเรียกใช้วิธีการต่อไปนี้:

<% Response.Clear Response.End %>

วิธีการ Response.AddHeader

วิธีการ AddHeader เพิ่มส่วนหัว HTML ที่มีค่าเฉพาะ วิธีการนี้จะเพิ่มส่วนหัวใหม่ในการตอบสนองต่อเบราว์เซอร์ไคลเอ็นต์เสมอ วิธีการนี้ไม่ได้แทนที่ส่วนหัวที่มีอยู่ด้วยส่วนหัวใหม่ ไม่สามารถลบส่วนหัวที่เพิ่มเข้าไปได้

วิธีการนี้ใช้สำหรับงาน "ขั้นสูง" เท่านั้น

Response.AddHeader ชื่อตัวแปร ค่า

พารามิเตอร์:

  • ตัวแปร_ชื่อ- ชื่อของพารามิเตอร์ส่วนหัว HTML ใหม่
  • ความหมาย- ค่าที่ตั้งไว้ซึ่งจะถูกจดจำไว้ในส่วนหัว

หมายเหตุ:

สำหรับ การดำเนินการที่ถูกต้องเมธอด Variable_name ต้องไม่มีขีดล่าง (_) ชุด ServerVariables ตีความขีดล่างเป็นเส้นประในส่วนหัว ตามตัวอย่าง สคริปต์ต่อไปนี้บังคับให้เซิร์ฟเวอร์ค้นหาพารามิเตอร์จากส่วนหัว HTML ที่เรียกว่า MY-HEADER

<% Requset.ServerVariables("HTTP_MY_HEADER") %>

เนื่องจากโปรโตคอล HTTP ต้องการให้ส่งพารามิเตอร์ส่วนหัวทั้งหมดก่อนที่ส่วนเนื้อหาของเพจ HTML คุณต้องเรียกใช้เมธอด AddHeader ในสคริปต์ของคุณก่อนที่คำอธิบายจะเริ่มต้น ...- มีข้อยกเว้นประการหนึ่ง หากคุณสมบัติ Buffer ถูกตั้งค่าเป็นจริง คุณสามารถเขียน AddHeader ได้ทุกที่ในสคริปต์ แต่ก่อนการเรียกเมธอด Flush ครั้งแรก มิฉะนั้น การเรียกเมธอด AddHeader จะทำให้เกิดข้อผิดพลาด

ไฟล์ .ASP สองไฟล์ต่อไปนี้แสดงให้เห็นถึงจุดสุดท้ายนี้

<% Response.AddHeader "Внимание!", "Текст сообщения об ошибке"%> ข้อความของคุณบนหน้า

ใน ในตัวอย่างนี้หน้าไม่ถูกบัฟเฟอร์ สคริปต์ใช้งานได้อย่างไรก็ตามมีการเรียก AddHeader ก่อนที่เซิร์ฟเวอร์จะสร้างเอาต์พุต HTML ไปยังไคลเอนต์

<% Response.Buffer = true %> นี่คือข้อมูลบางส่วนจากเพจของคุณ...<%Response.AddHeader "Внимание!", "сообщение об ошибке"%> <%Response.Flush%> <%Response.Write("некий текст")%>

ในตัวอย่างที่สอง เพจถูกบัฟเฟอร์ และด้วยเหตุนี้ เซิร์ฟเวอร์จึงไม่ส่งข้อความไปยังไคลเอนต์จนกว่าสคริปต์จะสิ้นสุดหรือพบวิธี Flush คุณสามารถใช้วิธีนี้เพื่อส่งสำเนาพารามิเตอร์ส่วนหัวบางส่วนที่มีค่าต่างกันหลายชุด เช่นเดียวกับส่วนหัว WWW-Authenticate

วิธีการ Response.AppendToLog

กระบวนการAppendToLogเพิ่มบรรทัดที่ส่วนท้ายของไฟล์รายงาน (ไฟล์บันทึก) ของเว็บเซิร์ฟเวอร์ คุณสามารถเรียกวิธีนี้ได้บ่อยเท่าที่คุณต้องการ แต่ละครั้งที่คุณเรียกใช้เมธอด สตริงที่คุณระบุจะถูกเขียนลงในไฟล์รายงานของเซิร์ฟเวอร์

ค่า Response.AppendToLog

พารามิเตอร์:

  • ความหมาย- ข้อความที่จะเพิ่มลงในไฟล์รายงานของเว็บเซิร์ฟเวอร์ สตริงนี้ไม่สามารถมีอักขระลูกน้ำ (,) นอกจากนี้ ความยาวรวมของบรรทัดที่เพิ่มไม่ควรเกิน 80 อักขระ

หมายเหตุ:

หากต้องการใช้คุณลักษณะนี้ คุณต้องเปิดใช้งานตัวเลือก URI Query ในแผง "คุณสมบัติการบันทึกขั้นสูง" สำหรับเว็บเซิร์ฟเวอร์นี้ใน IIS

Response.BinaryWrite วิธีการ

เมธอด BinaryWrite ช่วยให้คุณสามารถเขียนข้อมูลที่ระบุไปยังเอาต์พุต HTTP ปัจจุบันโดยไม่ต้องแปลงอักขระใดๆ เมธอดนี้มีประโยชน์สำหรับเอาต์พุตข้อมูลที่ไม่ใช่สตริง เช่น ข้อมูลไบนารีที่แอปพลิเคชันต้องการ

การตอบสนองข้อมูล BinaryWrite

พารามิเตอร์:

  • ข้อมูล- ข้อมูลมีไว้สำหรับเอาต์พุต HTTP

หากคุณมีออบเจ็กต์ที่สร้างอาร์เรย์ไบต์ คุณสามารถใช้การเรียกต่อไปนี้ไปยังเมธอดนี้เพื่อส่งผ่านอาร์เรย์นั้นไปยังแอปพลิเคชันบางตัวที่ทำงานบนเครื่องไคลเอ็นต์

<% Set BinGen = Server.CreateObject(My.BinaryGenerator) Pict = BinGen.MakePicture Response.BinaryWrite Pict %>

การตอบสนองวิธีการที่ชัดเจน

วิธีการล้างจะลบเอาต์พุต HTML ที่บัฟเฟอร์ไว้ทั้งหมด อย่างไรก็ตาม วิธีการนี้จะไม่ลบข้อมูลบัฟเฟอร์ที่เกี่ยวข้องกับส่วนหัว คุณสามารถใช้วิธีนี้เพื่อจัดการข้อผิดพลาด อย่างไรก็ตาม การดำเนินการวิธีนี้จะส่งผลให้เกิดข้อผิดพลาดหากคุณสมบัติ Response.Buffer ไม่เป็นความจริง

คุณสมบัติ Response.CacheControl

คุณสมบัตินี้จะแทนที่ค่าเริ่มต้น เมื่อคุณตั้งค่าคุณสมบัติเป็นสาธารณะ พร็อกซีเซิร์ฟเวอร์สามารถแคชผลลัพธ์ที่สร้างโดย ASP

Response.CacheControl [= ส่วนหัวการควบคุมแคช]

พารามิเตอร์:

  • ส่วนหัวการควบคุมแคช- พารามิเตอร์การควบคุมส่วนหัวนี้สามารถเป็นได้ทั้งสาธารณะหรือส่วนตัว

คุณสมบัติ Response.CharSet

คุณสมบัติ CharSet ช่วยให้คุณสามารถเพิ่มชื่อของตารางรหัสอักขระ (เช่น WINDOWS-1251) ลงในส่วนหัว HTML ซึ่งเป็นบรรทัดประเภทเนื้อหา

Response.CharSet code_table_name

พารามิเตอร์:

  • code_table_name- สตริงที่ระบุตารางการเข้ารหัสสำหรับเพจ HTML นี้ ชื่อของตารางโค้ดนี้จะถูกเพิ่มลงในส่วนหัวของไฟล์ HTML ใต้พารามิเตอร์ "content-type"

สำหรับเพจ ASP ที่ไม่ได้ใช้คุณสมบัติ Response.Charset พารามิเตอร์ "ประเภทเนื้อหา" ในส่วนหัวจะเป็นดังนี้:

ประเภทเนื้อหา:ข้อความ/html

หากไฟล์ ASP มีคำสั่ง

<%Response.Charset("Windows-1251")%>

จากนั้นในส่วนหัวฟิลด์ประเภทเนื้อหาจะมีลักษณะเช่นนี้

ประเภทเนื้อหา:ข้อความ/html; ชุดอักขระ=Windows-1251

ความคิดเห็น:

ฟังก์ชันนี้จะแทรกบรรทัดใดๆ ลงในส่วนหัวและไม่ตรวจสอบความถูกต้อง

หากเพจมีแท็ก Response.Charset หลายแท็ก แต่ละแท็กที่ตามมาจะแทนที่ค่าด้วยแท็กของตัวเอง

คุณสมบัติ Response.ContentType

คุณสมบัติ ContentType ช่วยให้คุณระบุประเภท (ประเภท) ของเนื้อหาของไฟล์ HTML ถ้า คุณสมบัตินี้ไม่ได้ใช้ ข้อความ/html จะถูกใช้เป็นค่าเริ่มต้น

Response.ContentType [=content_type]

พารามิเตอร์:

  • content_type- สตริงที่อธิบายประเภทเนื้อหา HTML โดยทั่วไปสตริงนี้จะอยู่ในรูปแบบ "type/subtype" โดยที่ type คือหมวดหมู่หลักของเนื้อหา และประเภทย่อยจะระบุประเภทของเนื้อหา เพื่อรับ รายการทั้งหมดประเภทที่รองรับ - โปรดดูเอกสารประกอบของเบราว์เซอร์ของคุณหรือข้อกำหนด HHTP

ตัวอย่างต่อไปนี้แสดงการตั้งค่าประเภทเนื้อหาเป็นรูปแบบคำจำกัดความของช่อง (Push Channels)

<% Response.ContentType = "application/x-cdf" %>

ตัวอย่างที่สองสาธิตการตั้งค่าคุณสมบัติให้เป็นค่าที่รู้จักมากที่สุด

<% Response.ContentType = "text/HTML" %> <% Response.ContentType = "image/GIF" %> <% Response.ContentType = "image/JPEG" %>

การตอบสนองคุณสมบัติหมดอายุ

คุณสมบัติ Expires ระบุระยะเวลาจนถึง หน้า HTMLแคชโดยเบราว์เซอร์ถือว่ายังไม่หมดอายุ (ระยะเวลาการจัดเก็บ) หากผู้ใช้ร้องขอเพจแคชจากเบราว์เซอร์ที่ยังไม่หมดอายุ เบราว์เซอร์จะส่งคืนเพจนั้นโดยตรงจากแคช

การตอบสนองหมดอายุ [=หมายเลข]

พารามิเตอร์:

  • ตัวเลข- จำนวนเวลาเป็นนาทีก่อนที่เพจจะถือว่า "เกินกำหนด" การตั้งค่านี้เป็น 0 สาเหตุ หน้านี้กลายเป็น "เกินกำหนด" ทันที

ความคิดเห็น:

หากคุณสมบัตินี้ถูกตั้งค่ามากกว่าหนึ่งครั้งบนเพจ ระบบจะใช้ค่าที่น้อยที่สุด

Response.ExpiresAbsolute คุณสมบัติ

คุณสมบัติ ExpiresAbsolute ระบุเวลาและวันที่หลังจากที่หน้า HTML ที่แคชโดยเบราว์เซอร์ถือว่าหมดอายุ (วันหมดอายุหมดอายุแล้ว) หากผู้ใช้ร้องขอเพจแคชจากเบราว์เซอร์ที่ยังไม่หมดอายุ เบราว์เซอร์จะส่งคืนเพจนั้นโดยตรงจากแคช หากมีการระบุเวลา (และระบุวันที่) "วันที่หมดอายุ" ของหน้านี้จะหมดอายุในเวลาเที่ยงคืนของวันนั้น หากไม่ได้ระบุเวลาหรือวันที่ ค่าจะถูกกำหนดตามวันและเวลาที่เรียกใช้สคริปต์

การตอบสนองหมดอายุแน่นอน [= [วันที่] [เวลา]]

พารามิเตอร์:

  • วันที่- ระบุวันหมดอายุของ “อายุการเก็บรักษา” รูปแบบวันที่ต้องเป็นไปตามมาตรฐาน RFC-1123
  • เวลา- ระบุเวลาที่หน้าหมดอายุ ค่านี้จะถูกแปลงเป็นรูปแบบ GMT (เวลามาตรฐานกรีนิช) ก่อนที่ส่วนหัวจะถูกส่งไปยังไคลเอนต์

ความคิดเห็น:

หากมีการกำหนดคุณสมบัติที่กำหนดมากกว่าหนึ่งครั้งบนเพจ เวลาหมดอายุของ "ระยะเวลาการจัดเก็บ" จะถูกถือเป็นค่าแรกสุดของค่าที่ระบุทั้งหมด

<% Response.ExpiresAbsolute = #May 31,1998 13:30:15# %>

คุณสมบัติ Response.IsClientConnected

คุณสมบัตินี้เป็นแบบอ่านอย่างเดียว ซึ่งหมายความว่าไม่สามารถกำหนดค่าให้กับคุณสมบัตินี้ได้ คุณสมบัตินี้ระบุว่าไคลเอ็นต์เชื่อมต่ออยู่หรือไม่เชื่อมต่อกับเซิร์ฟเวอร์ที่กำหนดไว้ในส่วนสุดท้ายของ Response.Write

การตอบสนอง IsClientConnected()

ความคิดเห็น:

คุณสมบัตินี้ช่วยให้คุณกำหนดได้ว่าเมื่อใดที่ผู้ใช้เชื่อมต่ออยู่ และเมื่อใดที่เขาถูกตัดการเชื่อมต่อจากเซิร์ฟเวอร์ ตัวอย่างเช่น ระยะเวลาระหว่างเวลาที่เซิร์ฟเวอร์ตอบสนองและเวลาที่ไคลเอ็นต์ทำการร้องขอ ให้ความมั่นใจว่าไคลเอ็นต์ยังคงเชื่อมต่ออยู่ และเหมาะสมที่จะดำเนินการสคริปต์ต่อไป

<% "посмотрим, подключен ли пользователь If Not Response.IsClientConnected Then "получаем номер сессии и закрываем сессию Shutdownid = Session.SessionID "подготовка к закрытию сессии Shutdown(Shutdownid) End If %>

คุณสมบัติ Response.Pics

คุณสมบัตินี้ช่วยให้คุณสามารถเพิ่มค่าของฟิลด์ภาพป้ายกำกับไปยังส่วนหัวของการตอบกลับ

การตอบกลับ PICS (PICSLabel)

ตัวเลือก

  • PicsLabel- สตริงที่ถูกแปลงเป็นรูปแบบ PICS - ป้ายกำกับ ค่าที่ระบุในพารามิเตอร์นี้จะถูกเพิ่มลงในส่วนหัวการตอบกลับในฟิลด์ PICS

สำหรับไฟล์ ASP รวมถึง:

<% Response.PICS("(PICS-1.1 ป้ายกำกับในการจัดอันดับ " & chr(34) & "1997.01.05T08:15-0500" จนถึง "1999.12.31T23:59-0000" (v 0 s 010 n 0))%>

ส่วนหัวถัดไปจะถูกสร้างขึ้น

PICS-ป้ายกำกับ:(PICS-1.1 ป้ายกำกับในการจัดอันดับ "1997.01.05T08:15-0500" จนถึง "1999.12.31.T23:59-0000" (v 0 s 0 1 0 n 0))

ความคิดเห็น:

คุณสมบัตินี้ช่วยให้คุณสามารถแทรกบรรทัดใดๆ ลงในส่วนหัวได้ ไม่ว่าบรรทัดนั้นจะถูกต้องหรือไม่ก็ตาม

หากเพจมีแท็กจำนวนมากที่มี Response.PICS แต่ละแท็กที่ตามมาจะแทนที่ค่าของแท็กก่อนหน้า

คุณสมบัติการตอบสนองสถานะ

คุณสมบัตินี้ช่วยให้คุณสามารถระบุบรรทัดสถานะที่ส่งคืนโดยเซิร์ฟเวอร์ ค่าสถานะถูกกำหนดไว้ในข้อกำหนด HTTP

Response.Status = status_description

ตัวเลือก

  • state_description- บรรทัดที่มีตัวเลขสามหลักซึ่งระบุรหัสสถานะและคำอธิบายโดยย่อของรหัสนี้ ตัวอย่างเช่น 310 ย้ายอย่างถาวร

ตัวอย่างต่อไปนี้แสดงการตั้งค่าสถานะ:

<% Response.Status = "401 Unauthorized" %>

ความคิดเห็น:

ใช้คุณสมบัตินี้เพื่อแก้ไขสตริงที่ส่งคืนโดยเซิร์ฟเวอร์