בקשת GET I POST ב ASP.NET MVC 4
-
@ממ
יצרתם קונטרולר?
אתם יכולים ללחוץ קליק ימני ואז לבקש קונטרולר חדש, עם או בלי נתונים. ככה תוכלו לראות את התבנית הרגילהניתן להשתמש עם [HttpPost] לבקשות פוסט וב [HttpGet] כאטריביוט לפני הפונקציה כדי להגדיר האם הפונקציה הזו היא GET או POST
דוגמא לקונטרולרusing System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Mvc.Ajax; namespace MvcApplication1.Controllers { public class ProductController : Controller { // // GET: /Products/ public ActionResult Index() { // Add action logic here return View(); } } }
וזה דוגמא לקונטרולר API (אפשר להשתמש ברגיל גם לבקשות API)
using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; namespace MyWebAPI.Controllers { public class ValuesController : ApiController { // GET: api/values public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } // GET: api/values/5 public string Get(int id) { return "value"; } // POST: api/values public void Post([FromBody]string value) { } // PUT: api/values/5 public void Put(int id, [FromBody]string value) { } // DELETE: api/values/5 public void Delete(int id) { } } }
מקורות לקוד: (כמובן ניתן לראות את הקוד גם בVS עם יצירת קונטרולר)
https://learn.microsoft.com/en-us/aspnet/mvc/overview/older-versions-1/controllers-and-routing/aspnet-mvc-controllers-overview-cs -
@clickone
תודה
אבל תבסיס של הקונטרולר יש לי
אני רוצה לדעת איך לרשום תפונקציות עצמם
דוגמא למשהו שרשמתי בעבר וכאן זה לא נכון:[Route("api/Login/IsStudent/{id}/{password}")] [HttpGet] public StudentView IsStudent(string id, int password) { return Mapper.Map<Student, StudentView>( MyStudentBL.GetStudent(id, password)); }
איך אני רושמת כזה דבר אבל שמותאם לקונטרולר ולא לקונטרולר API
-
@ממ מה סוג הנתונים שצריך לחזור מהפונקציה?
JSON? XML? סתם תצוגת HTML?
או לפי הבקשה להחזיר את הסוג?וגם, מה הכוונה
@ממ כתב בבקשת GET I POST ב ASP.NET MVC 4:
אני רוצה לדעת איך לרשום תפונקציות עצמם
אולי יותר קל שלהתחלה תסבירו מה התוצאה שאליה תרצו להגיע, ומה ניסיתם.
לדוגמא:
הלקוח שולח מזהה משתמש וסיסמא, והפונקציה צריכה להחזיר בוליאני אם הוא קיםם, וזו הפונקציה שלי וכו' -
-
@ממ
מה שניסיתי לדוגמא לבקשת POST[Route("api/Home/InsertClient")] [HttpPost] public ActionResult InsertClient(ClientView newClient) { try { MyBL.InsertClient(newClient.ID, newClient.FirstName, newClient.LastName); return View(newClient); } catch (Exception ex) { return View(); } }
דוגמא לבקשת GET שניסיתי:
[Route("api/Home/ListClients")] [HttpGet] public List<ClientView> ListClients() { return Conversion.ConvertClientToClientView(MyBL.ListClients()); }
-
@ממ אתם מחזירים ActionResult
בגלל שצד הלקוח הוא אנגולר, אתם יכולים להחזיר ישירות את האובייקט שאתם רוצים להחזיר.
אתם משתמשים בדוגמא בהחזרה בView, שהוא בד"כ מחזיר את קובץ הcshtml שנמצא בתקיית התצוגות.
אני חושב שאתם לא נדרשים לזה בכלל באנגולר.
אפשר או:- להחזיר Json ככה:
return Json(newClient, JsonRequestBehavior.AllowGet);
- לחילופין אפשר לשנות את החתימה של הפונקציה ככה:
public ClientView InsertClient(ClientView newClient)
ואז להחזיר תשובה:
return ClientView;
יש מצב שבזה תצטרכו לעשות לו המרה לJSON גם, אני כבר לא זוכר.
למה בעצם אתם לא משתמשים בקונטרוללר מסוג ApiController?
דבר נוסף, אם אפשר, במידה וקיבלתם מהשרת תגובה שלא תיכננתם לקבל, תכתבו מה קיבלתם - כי לא ברור האם חזרה תשובה או משהו אחר. -
@ממ
טוב....
מחקירה רצינית בגוגל הגעתי ל2 מסקנות ---
א. או שזה קשור לבעיה בCORS - זה מה שרשמתי בקונטרולר:
וזה בקובץ WebApiConfig:
את הקובץ WebApiConfig יצרתי לבד (העתקתי את התוכן מגוגל..) זה יכול להוות בעיה??
ב. או שחסר לי משהו בהגדרות של XML כי כשאני מריצה פונקציה ספציפית זה מביא אותי לשגיאה הבאה:
מישהו יכול לעזור לי -- זה ממש ממש דחוף!
תודה רבה!