【问题标题】:How can I access my API with variable in API如何使用 API 中的变量访问我的 API
【发布时间】:2021-12-27 17:13:09
【问题描述】:

我是 Blazor 的新手,我有一个关于 Blazor 和 API 的问题。

在我的.razor 文件中,我有这段代码,我可以在其中获取数据以填写我的表格(所以这段代码有效):

@code {
    public PrgUser[] users { get; set; }
    IList<PrgUser> selectedUser;

    protected override async Task OnInitializedAsync()
    {
        users = await Http.GetFromJsonAsync<PrgUser[]>("http://localhost:30958/api/Test");

        selectedUser = users.Take(1).ToList();
    }
}

此代码与 API 端的以下代码配合得很好:

[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
    private readonly IneosAppDevContext _context;

    public TestController(IneosAppDevContext context)
    {
        _context = context;
    }

    // GET: api/Areas
    [HttpGet]
    public async Task<ActionResult<IEnumerable<PrgUser>>> GetUser()
    {
        return await _context.PrgUser.ToListAsync();
    }
}

但现在我想添加一个DELETE 函数,但我不知道该怎么做。我有这段代码,但它不能这样工作......

.razor文件:

  @code {
    public PrgUser[] users { get; set; }
    IList<PrgUser> selectedUser;

    protected override async Task OnInitializedAsync()
    {
        users = await Http.GetFromJsonAsync<PrgUser[]>("http://localhost:30958/api/Test");

        selectedUser = users.Take(1).ToList();
    }


    protected async Task Enter()
    {
        Console.WriteLine("Pressed");
        var response = await Http.DeleteAsync("http://localhost:30958/api/Test/" + selectedUser[0].UserId);
    }
 }

API 端:

    [HttpDelete]
    [Route("/api/Test/{id}")]

    public async Task<HttpResponseMessage> Delete(int id)
    {
        var user = await _context.PrgUser.FindAsync(id);

        if (user == null)
        {
            // if ID not found
            return new HttpResponseMessage(HttpStatusCode.NotFound);
        }

        try 
        {
            // Success
            _context.PrgUser.Remove(user);
            return new HttpResponseMessage(HttpStatusCode.OK);

        }
        catch (Exception ex)
        {
            // Exception
            return new HttpResponseMessage(HttpStatusCode.ExpectationFailed);
        }

【问题讨论】:

  • “我有这个代码,但它不能这样工作......” - 你是什么意思?它似乎以什么方式不起作用。正在执行什么代码?
  • 提供所有错误消息并说明实际结果与预期结果。
  • @KirkWoll 我尝试使用该代码,但它不起作用。我的问题是是否有人知道我的错。

标签: api blazor


【解决方案1】:

假设 API 控制器方法被命中。

控制器函数的签名应如下所示:

[HttpDelete]
[Route("/api/Test/{id}")]
public async Task<HttpResponseMessage> Delete(int id)
{

    // if ID not found     
    return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Id " + id.ToString() + "not found");
  
   // Success
    return Request.CreateResponse(HttpStatusCode.OK);  

   // Exception
   return Request.CreateErrorResponse(HttpStatusCode.BadRequest, Ex);  
}

在通话中

var response = await Http.DeleteAsync("http://localhost:30958/api/Test/" + selectedUser[0].UserId);
// Check the response and act accordingly

【讨论】:

  • 感谢您查看我的代码并尝试帮助我!对此,我真的非常感激!你能再看看我的代码吗?我用你的信息编辑过。在我的 API 方面,我使用了标题不同的代码,因为我遇到了与这篇文章相同的问题 (stackoverflow.com/questions/41757245/…) 但是当我现在尝试运行它时,de 数据库中仍然没有做任何事情。你能在我的代码中看到任何其他问题吗?
  • 在调试模式下检查控制器是否真的被击中,
猜你喜欢
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
  • 2017-02-13
相关资源
最近更新 更多