เสร็จแล้วมาเพิ่ม HelloWorldController
แก้ไข HelloWorldController
Controllers/HelloWorldController.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
using Microsoft.AspNetCore.Mvc; using System.Text.Encodings.Web; namespace MvcMovie.Controllers { public class HelloWorldController : Controller { // // GET: /HelloWorld/ public string Index() { return "This is my default action..."; } // // GET: /HelloWorld/Welcome/ public string Welcome() { return "This is the Welcome action method..."; } // GET: /HelloWorld/Welcome/ // Requires using System.Text.Encodings.Web; public string WelcomeA(string name, int numTimes = 1) { return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}"); } public string WelcomeB(string name, int ID = 1) { return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}"); } } } |
บรรทัดที่ 26,31 ; ใช้ HtmlEncoder.Default.Encode
ในการจัดการกับอินพุท เพื่อป้องกันการโจมตีทางอินพุทสตริงที่ส่งมา (malicious input)
ทดสอบ WelcomeA
เรียกไปที่ https://localhost:5001/HelloWorld/WelcomeA?name=Jack&numtimes=4
จะได้ Hello Jack, NumTimes is: 4
เรียกไปที่ https://localhost:5001/HelloWorld/WelcomeA?name=Jack
จะได้ Hello Jack, NumTimes is: 1
(เพราะ numTimes
มีค่า default เป็น 1)
เรียกไปที่ https://localhost:5001/HelloWorld/WelcomeA
จะได้ Hello , NumTimes is: 1
(เพราะ name
ไม่มีค่า default)
ทดสอบ WelcomeB
เรียกไปที่ https://localhost:5001/HelloWorld/WelcomeB/3?name=Jack
จะได้ Hello Jack, ID: 3
จะสังเกตุเห็นได้ว่า id
ไม่ได้ส่งไปเป็นพารามิเตอร์เหมือน name
แต่ id
เป็นส่วนหนึ่งของ url เป็นเพราะว่า id
เป็น template ที่ถูกเรียกใช้ใน MapRoute
(ดูไฟล์ Startup.cs)
Startup.cs
1 2 3 4 5 6 |
app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); |
เรียกไปที่ https://localhost:5001/HelloWorld/WelcomeB/3
จะได้ Hello , ID: 3
เรียกไปที่ https://localhost:5001/HelloWorld/WelcomeB
จะได้ Hello , ID: 1
Link