响应状态代码未指示成功:404(未找到)

时间:2020-10-14 21:00:48

标签: api blazor

我有一个概述页面,该页面正在使用API​​调用将数据返回到表格视图中,并创建了第二个页面,用于在选择时更新行。当我选择一行时,我可以看到行ID正在传递到下一页,但是它崩溃并显示以下错误:“响应状态代码未指示成功:404(未找到)”

CMTasksPriority.razor

@page "/CMTasks/cmtaskpriority"
@inherits CMTasksPriorityBase

<h1 class="page-title">All Task Prioritys</h1>

@if (CMTaskPriorities == null)
{
    <p><em>Loading...</em></p>
}
else
{
    <table class="table">
        <thead>
            <tr>
                <th>Task Priority ID</th>
                <th>Priority Level</th>
                <th>Display Order</th>
                <th>Is Deleted</th>
                <th></th>
            </tr>
        </thead>
        <tbody>
            @foreach (var tasklevel in CMTaskPriorities)
            {
                <tr>
                    <td>@tasklevel.TaskPriorityID</td>
                    <td>@tasklevel.PriorityLevel</td>
                    <td>@tasklevel.DisplayOrder</td>
                    <td>@tasklevel.IsDeleted</td>
                    <td>
                        @*<a href="@($"https://localhost:5001/CMTaskPriority/{tasklevel.TaskPriorityID}/tasakpriorityid?id={tasklevel.TaskPriorityID}")" class="btn btn-primary table-btn">*@
                            <a href="@($"CMTasks/cmtaskpriorityedit/{tasklevel.TaskPriorityID}")" class="btn btn-primary table-btn">
                                <i class="fas fa-info-circle"></i>
                            </a>
                    </td>
                </tr>
            }
        </tbody>
    </table>
}

CMTaskPriorityBase.cs

using Microsoft.AspNetCore.Components;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using CouncilManagerShared.CMTasks;
using CouncilManagerUI.Shared;
using CouncilManagerUI.Services;
using System.Net.Http;
using System.Net;
using System.Text;
using System.IO;

namespace CouncilManagerUI.Pages
{
    public class CMTasksPriorityBase : ComponentBase
    {

       
        [Inject]
        public ITaskPriorityDataService PriorityDataService { get; set; }

        public List<CMTaskPriority> CMTaskPriorities { get; set; }

        protected override async Task OnInitializedAsync()
        {
            //  InitializeTaskPrioritys();

            // WebMethod();

            CMTaskPriorities = (await PriorityDataService.GetAllTaskPrioritys()).ToList();


           // return base.OnInitializedAsync();
        }
    }
}

CMTaskPriorityEdit.razor

@page "/CMTasks/cmtaskpriorityedit"
@page "/CMTasks/cmtaskpriorityedit/{TaskPriorityID}"
@using CouncilManagerShared
@inherits CMTasksPriorityEditBase


<section class="taskpriority-edit">
    @if (!Saved)
    {
<h1 class="page-title">Current setting : @CMTaskPriority. </h1>

<EditForm Model="@CMTaskPriority" OnValidSubmit="@HandleValidSubmit" OnInvalidSubmit="@HandleInvalidSubmit">

    <DataAnnotationsValidator />
    <ValidationSummary />
    <div class="form-group row">
        <label for="prioritylevel" class="col-sm-3">Priority level: </label>
        <InputText id="prioritylevel" class="form-control col-sm-8" @bind-Value="@CMTaskPriority.PriorityLevel" placeholder="Enter priority level" @ref="PriorityLevelInputText"></InputText>
        <ValidationMessage class="offset-sm-3 col-sm-8" For="@(() => CMTaskPriority.PriorityLevel)" />
    </div>

    @*<div class="form-group row">
        <label for="displayorder" class="col-sm-3">Display Order: </label>
        <InputText id="displayorder" class="form-control col-sm-8" @bind-Value="@CMTaskPriority.DisplayOrder" placeholder="Display Order" @ref="DisplayOrderInputText"></InputText>
        <ValidationMessage class="offset-sm-3 col-sm-8" For="@(() => CMTaskPriority.DisplayOrder)" />
    </div>*@
    

    <button type="submit" class="btn btn-primary edit-btn">Save task priority</button>
    <a class="btn btn-outline-primary edit-outline-btn" @onclick="@NavigateToOverview">Cancel</a>
    @if (CMTaskPriority.TaskPriorityID > 0)
    {
<a class="btn btn-danger" @onclick="@DeleteTaskPriority"> Delete</a>}
</EditForm> }
                            else
                            {
                <div class="alert @StatusClass">@Message</div>
                                <a class="btn btn-outline-primary" @onclick="@NavigateToOverview">Back to overview</a>}
</section>

CMTaskPriorityEditBase.cs

using Microsoft.AspNetCore.Components;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using CouncilManagerShared.CMTasks;
using CouncilManagerUI.Shared;
using CouncilManagerUI.Services;
using System.Net.Http;
using System.Net;
using System.Text;
using System.IO;
using Microsoft.AspNetCore.Components.Forms;

namespace CouncilManagerUI.Pages
{
    public class CMTasksPriorityEditBase : ComponentBase
    {
        [Inject]
        public ITaskPriorityDataService TaskPriorityDataService { get; set; }


        [Inject] public NavigationManager NavigationManager { get; set; }

        [Parameter]
        public string TaskPriorityId { get; set; }

      
        public InputText PriorityLevelInputText { get; set; }
        public InputText DisplayOrderInputText { get; set; }
        public InputText IsDeletedInputText { get; set; }


        public CMTaskPriority CMTaskPriority { get; set; } = new CMTaskPriority();


        //used to store state of screen
        protected string Message = string.Empty;
        protected string StatusClass = string.Empty;
        protected bool Saved;


        protected override async Task OnInitializedAsync()
        {
            Saved = false;
      

            int.TryParse(TaskPriorityId, out var taskpriorityId);

            if (taskpriorityId == 0) //new employee is being created
            {
                //add some defaults
                CMTaskPriority = new CMTaskPriority { };
            }
            else
            {
                CMTaskPriority = await TaskPriorityDataService.GetTaskPriorityDetailsByID(int.Parse(TaskPriorityId));
            }

           ;
        }

        protected async Task HandleValidSubmit()
        {
     

            if (CMTaskPriority.TaskPriorityID == 0) //new
            {
                var addedTaskPriority = await TaskPriorityDataService.AddNewTaskPriority(CMTaskPriority);
                if (addedTaskPriority != null)
                {
                    StatusClass = "alert-success";
                    Message = "New task priority added successfully.";
                    Saved = true;
                }
                else
                {
                    StatusClass = "alert-danger";
                    Message = "Something went wrong adding the new task priority. Please try again.";
                    Saved = false;
                }
            }
            else
            {
                await TaskPriorityDataService.UpdateTaskPriority(CMTaskPriority);
                StatusClass = "alert-success";
                Message = "Task priority updated successfully.";
                Saved = true;
            }
        }

        protected void HandleInvalidSubmit()
        {
            StatusClass = "alert-danger";
            Message = "There are some validation errors. Please try again.";
        }

        protected async Task DeleteTaskPriority()
        {
            await TaskPriorityDataService.DeleteTaskPriority(CMTaskPriority.TaskPriorityID);

            StatusClass = "alert-success";
            Message = "Deleted successfully";

            Saved = true;
        }

        protected void NavigateToOverview()
        {
            NavigationManager.NavigateTo("/CMTasks/cmtaskpriority");
        }
    }
}

CMTaskPriority.cs

using System;
using System.ComponentModel.DataAnnotations;

namespace CouncilManagerShared.CMTasks
{
    public class CMTaskPriority
    {
        [Key]
        public int TaskPriorityID { get; set; }
        public string PriorityLevel { get; set; }
        public int DisplayOrder { get; set; }
        public bool IsDeleted { get; set; }
    }
}

在第26行的CMTaskPriorityEditBase.cs中,已从API调用TaskPriorityID并对其进行了设置

public string TaskPriorityId { get; set; }

但是在第34行,以下代码被调用了4次,然后由于错误而停止。

public CMTaskPriority CMTaskPriority { get; set; } = new CMTaskPriority();

using System.Collections.Generic;
using System.Threading.Tasks;
using CouncilManagerShared.CMTasks;

namespace CouncilManagerUI.Services
{
    public interface ITaskPriorityDataService
    {
        Task<IEnumerable<CMTaskPriority>>GetAllTaskPrioritys();
        Task<CMTaskPriority> GetTaskPriorityDetailsByID(int TaskPriorityID);
        Task<CMTaskPriority> AddNewTaskPriority(CMTaskPriority priority);
        Task UpdateTaskPriority(CMTaskPriority priority);
        Task DeleteTaskPriority(int TaskPriorityID);
    }
}

CMTaskPriorityController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using CouncilManagerShared.CMTasks;
using CouncilManagerAPI.Models;


// For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860

namespace CouncilManagerAPI.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class CMTaskPriorityController : ControllerBase
    {
        private readonly ICMTaskPriorityRepository _CMTaskPriorityRepository;

        public CMTaskPriorityController(ICMTaskPriorityRepository CMTaskPriorityRepository)
        {
            _CMTaskPriorityRepository = CMTaskPriorityRepository;
        }


        /// <summary>
        /// Get all task priortys
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public IActionResult GetCMTaskPriority()
        {
            return Ok(_CMTaskPriorityRepository.GetAllCMTaskPriority());
        }



        /// <summary>
        /// Get all task prioriys by id
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpGet("{TaskPriorityID}/tasakpriorityid")]
        public IActionResult GetTaskPriorityByID(int id)
        {
            return Ok(_CMTaskPriorityRepository.GetCMTaskPriorityById(id));
        }


        /// <summary>
        /// Update exiting task priorty
        /// </summary>
        /// <param name="cmtaskpriority"></param>
        /// <returns></returns>
        [HttpPut]
        public IActionResult UpdateCMTaskPriority([FromBody] CMTaskPriority cmtaskpriority)
        {
            if (cmtaskpriority == null)
                return BadRequest();

            if (cmtaskpriority.PriorityLevel == string.Empty || cmtaskpriority.PriorityLevel == string.Empty)
            {
                ModelState.AddModelError("Priority/Level", "The priority level shouldn't be empty");
            }

            if (!ModelState.IsValid)
                return BadRequest(ModelState);

            var CMTaskPriorityToUpdate = _CMTaskPriorityRepository.GetCMTaskPriorityById(cmtaskpriority.TaskPriorityID);

            if (CMTaskPriorityToUpdate == null)
                return NotFound();

            _CMTaskPriorityRepository.UpdateCMTaskPriority(cmtaskpriority);

            return NoContent(); //success

        }
    }
}

0 个答案:

没有答案