c# - 如何从 ASP.NET 核心执行 [HttpGet] 获取任意参数
问题描述
我用 APS.NET 核心和 CRUD 原理学习 Angular
我有这两种方法,例如:
/// <summary>
/// Retrieve all items from Books.
/// </summary>
/// <returns>Books items List</returns>
// GET: api/BooksXml
[HttpGet]
public IActionResult GetBookItems()
{
List<BookItem> BookItems = new List<BookItem>();
XDocument doc = _db.GetXmlDb();
List<BookItem> bookitems = doc.Descendants("book").Select(x => new BookItem()
{
Id = (string)x.Attribute("id"),
Author = (string)x.Element("author"),
Title = (string)x.Element("title"),
Genre = (string)x.Element("genre"),
Price = (decimal)x.Element("price"),
Publish_date = (DateTime)x.Element("publish_date"),
Description = (string)x.Element("description")
}).ToList();
return Ok(bookitems);
}
/// <summary>
/// Returns a Book item matching the given id.
/// </summary>
/// <param name="id">Id of item to be retrieved</param>
/// <returns>Book item</returns>
// GET: api/BooksXml/5
[HttpGet("{id}")]
public IActionResult GetBookItems(string id)
{
XDocument doc = _db.GetXmlDb();
XElement result = doc.Descendants("book").FirstOrDefault(el => el.Attribute("id") != null &&
el.Attribute("id").Value == id);
List<BookItem> BookItems = new List<BookItem>();
if (result != null)
{
BookItem Book = new BookItem();
Book.Id = (string)result.Attribute("id");
Book.Author = (string)result.Element("author");
Book.Title = (string)result.Element("title");
Book.Genre = (string)result.Element("genre");
Book.Price = (decimal)result.Element("price");
Book.Publish_date = (DateTime)result.Element("publish_date");
Book.Description = (string)result.Element("description");
BookItems.Add(Book);
}
return Ok(BookItems);
}
它们都是正确的 get 方法,我更想要的是另一个 get 带有路由的方法,这样我就可以在我的后端书籍数据库中搜索书名。
像这样:(BooksXmlController.cs)
/** GET all books from server. */
getBookItems(): Observable<BookItem[]> {
return this.http.get<BookItem[]>(this.BookItemsUrl);
}
/** GET book by id. */
getBookItem(id: string): Observable<BookItem[]> {
const url = `${this.BookItemsUrl}/${id}`;
return this.http.get<BookItem[]>(url);
}
/** GET book by title from server. */
getBookByTitle(title: string): Observable<BookItem> {
const url = `${this.BookItemsUrl}/${title}`;
return this.http.get<BookItem>(url);
}
注意getBookByTitle
,我如何将“标题”映射到 ASP.NET 核心后端 [HttpGet]
解决方案
在你的控制器中添加另一个动作,它接受一个字符串作为参数:
[HttpGet]
public IActionResult GetBookItemsByTitle(string title)
{
}
如果你想调用这个动作,url 将是:
const url = `${this.BookItemsUrl}?title=${title}`;
我建议看一下Routing in ASP.NET Core。
编辑:
如果您想重用当前存在的代码,请{id}
从路由中删除并添加标题:
[HttpGet]
public IActionResult GetBookItems(string id, string title)
{
}
之后,您可以使用这些 URL 调用您的方法:
const url = `${this.BookItemsUrl}?id=${id}`;
const url = `${this.BookItemsUrl}?title=${title}`;
const url = `${this.BookItemsUrl}?id=${id}&title=${title}`;
推荐阅读
- clean-architecture - 为什么控制器必须在 Clean Architecture 中的用例上调用接口
- javascript - Immutablity-helper - 如何更新这个值?
- json - 如何在 Symfony 4 中使用通过 Ajax 加载的表单将数据保存在数据库中?
- c# - 在 AutoMapper 中映射嵌套不同类型具有不同属性名称的嵌套对象
- maven - 如何使用 liberty-maven-plugin 在后台以调试模式启动 Liberty 服务器?
- javascript - 如何使用cordova-plugin-dialogs?
- bash - Unix 将行转换为列
- c# - 将一个数据表的内容复制到另一个数据表而不使用克隆或复制
- scala - 当成员包含通过反射评估的惰性值时,RDD 上的操作将在单个节点上执行
- ios - 如何在swift中实现有角度的butterbar效果?