post 매개 변수가 Reactjs의 asp.net 핵심 웹 API가 항상 null 인 이유는 무엇입니까?

베남

저는 asp.net 코어 3.0과 Reactjs 웹 애플리케이션을 작성했습니다. 내 API에 게시 할 때 문제가 있습니다. 메서드에 맞지만 인수는 항상 null입니다.

디버깅했고 반응 앱에서 데이터를 보았습니다.

DELETE 메서드를 호출 할 때 아무런 문제가 없습니다.

CQRS + MediatR 패턴을 사용하고 있지만 단순화하기 위해 Cqrs + MediatR의 일부를 제거하고 ActivityConroller에 코드를 추가했습니다. 양식을 처리하기 위해 Formik 라이브러리를 사용했으며 웹 앱의 템플릿을 만들기 위해 Ant Design을 사용했습니다.

백엔드 :

     [Route("api/[controller]")]
     public class ActivitiesController : ControllerBase
     {        
         private readonly DataContext _context;

         public Handler(DataContext context)
         {
             _context = context;
         }

         [HttpPost]
         public async Task<ActionResult> Create(Activity model)
         {
             var activity = new Activity
             {
                 Id = model.Id,
                 Title = model.Title,
                 Description = model.Description,
                 Category = model.Category,
                 Date = model.Date,
                 City = model.City,
                 Venue = model.Venue
             };

             _context.Activities.Add(activity);

             var success = await _context.SaveChangesAsync() > 0;

             if (success) return Ok();

             throw new Exception("Problem saving changes");
         }        
    }

----------
ActivityForm.tsx

import React, { useState, FormEvent } from "react";
import { Formik, FormikProps, Field } from "formik";
import { Button, Input, Form, Card, DatePicker } from "antd";
import FormItem from "antd/lib/form/FormItem";
import { IActivity } from "../../../app/models/activity";
import moment, { Moment } from "moment";
import "moment/locale/en-au";
import { v4 as uuid } from "uuid";
const { TextArea } = Input;

interface IProps {
  setEditMode: (arg: boolean) => void;
  activity: IActivity;
  createActivity: (activity: IActivity) => void;
  editActivity: (activity: IActivity) => void;
}

export const ActivityForm: React.FC<IProps> = (prop: IProps) => {
  const initialValues = () => {
    if (prop.activity) {
      return prop.activity;
    } else {
      return {
        id: "",
        title: "",
        category: "",
        description: "",
        city: "",
        date: "",
        venue: ""
      };
    }
  };
  const [activity, setActivity] = useState<IActivity>(initialValues);
  const [chooseDate, setChooseDate] = useState();
  // const defaultValue = moment().format("YYYY/MM/DD HH:mm:ss");
  const onChange = (date: Moment | null, dateString: string) => {
    let dateSelected = date;
    setChooseDate(dateSelected);
  };
  const handleInputChange = (
    event: FormEvent<HTMLInputElement | HTMLTextAreaElement>
  ) => {
    const { name, value } = event.currentTarget;
    setActivity({ ...activity, [name]: value });
  };
  const handleSubmit = (e: FormEvent) => {
    e.preventDefault();
    if (activity.id.length === 0) {
      let newActivity = { ...activity, id: uuid() };
      newActivity.date = moment(chooseDate).format("YYYY-MM-DD HH:mm:ss");
      console.log(newActivity);
      prop.createActivity(newActivity);
    } else {
      prop.editActivity(activity);
    }
  };
  return (
    <div>
      <Formik
        initialValues={initialValues}
        onSubmit={(values, actions) => {

        }}
        render={() => (
          <Form style={{ marginTop: 100 }} onSubmit={handleSubmit}>
            <Field
              render={(props: IProps & FormikProps<IProps>) => (
                <Card style={{ width: 400 }}>
                  <FormItem>
                    <Input
                      value={activity.title}
                      placeholder="Title"
                      onChange={handleInputChange}
                      name="title"
                      type="text"
                    />

                    <TextArea
                      // {...props.description}
                      value={activity.description}
                      placeholder="Description"
                      onChange={handleInputChange}
                      rows={4}
                      name="description"
                    />

                    <Input
                      value={activity.category}
                      placeholder="Category"
                      onChange={handleInputChange}
                      name="category"
                      type="text"
                    />

                    <DatePicker
                      showTime={{
                        defaultValue: moment("00:00:00", "HH:mm:ss")
                      }}

                      style={{ width: 350 }}
                      onChange={() => onChange}
                      name="date"
                      format="YYYY-MM-DD HH:mm:ss"
                    />

                    <Input
                      value={activity.city}
                      placeholder="City"
                      onChange={handleInputChange}
                      name="city"
                      type="text"
                    />

                    <Input
                      value={activity.venue}
                      placeholder="Venue"
                      onChange={handleInputChange}
                      name="venue"
                      type="text"
                    />
                  </FormItem>

                  <div>
                    <Button htmlType="submit" type="primary" size="large">
                      Submit
                    </Button>
                    <Button
                      onClick={() => prop.setEditMode(false)}
                      type="ghost"
                      size="large"
                      style={{ marginLeft: 10 }}
                    >
                      Cancel
                    </Button>
                  </div>
                </Card>
              )}
            />
          </Form>
        )}
      />
    </div>
  );
};

agent.ts

import axios, { AxiosResponse } from "axios";
import { IActivity } from "../models/activity";

axios.defaults.baseURL = "http://localhost:5000/api";

const responseBody = (response: AxiosResponse) => response.data;

const requests = {
  get: (url: string) => axios.get(url).then(responseBody),
  post: (url: string, body: {}) =>
    axios.post(url, body).then(responseBody),
  put: (url: string, body: {}) => axios.put(url, body).then(responseBody),
  del: (url: string) => axios.delete(url).then(responseBody)
};

const Activities = {
  list: (): Promise<IActivity[]> => requests.get("/activities"),
  details: (id: string) => requests.get(`/activities/${id}`),
  create: (activity: IActivity) => requests.post("/activities", activity),
  update: (activity: IActivity) =>
    requests.put(`/activities/${activity.id}`, activity),
  delete: (id: string) => requests.del(`/activities/${id}`)
};

export default { Activities };

App.tsx

import React, { useEffect, useState, Fragment } from "react";
import { IActivity } from "../models/activity";
import { NavBar } from "../../features/nav/NavBar";
import { ActivityDashboard } from "../../features/activities/dashboard/ActivityDashboard";
import "./styles.css";
import agent from "../api/agent";

function App() {
  const [activities, setActivities] = useState<IActivity[]>([]);
  const [selectedActivity, setSelectedActivity] = useState<IActivity | null>(
    null
  );

  const handleSelectActivity = (id: string) => {
    setSelectedActivity(activities.filter(a => a.id === id)[0]);
    setEditMode(false);
  };
  const [submitting, setSubmitting] = useState(false);
  const handleOpenCreateForm = () => {
    setSelectedActivity(null);
    setEditMode(true);
  };


  const handleCreateActivity = (activity: IActivity) => {
    agent.Activities.create(activity)
      .then(() => {
        setActivities([...activities, activity]);
        setSelectedActivity(activity);
        setEditMode(false);
      })
      .catch(error => {
        console.log(error.response);
      });
  };

  const handleEditActivity = (activity: IActivity) => {
    setActivities([...activities.filter(a => a.id !== activity.id), activity]);
    setSelectedActivity(activity);
    setEditMode(false);
  };

  const handleDeleteActivity = (id: string) => {
    agent.Activities.delete(id)
      .then(() => {
        setActivities([...activities.filter(a => a.id !== id)]);
      })
      .catch(error => {
        console.log(error.response);
      });
  };

  const [editMode, setEditMode] = useState(false);

  useEffect(() => {
    async function fetchData() {
      agent.Activities.list().then(response => {
        let activities: IActivity[] = [];
        response.forEach(activity => {
          activity.date = activity.date.split(".")[0];
          activities.push(activity);
        });
        setActivities(activities);
      });
    }
    fetchData();
  }, []);

  return (
    <Fragment>
      <NavBar openCreateForm={handleOpenCreateForm} />

      <ActivityDashboard
        activities={activities}
        selectActivity={handleSelectActivity}
        selectedActivity={selectedActivity}
        editMode={editMode}
        setEditMode={setEditMode}
        setSelectedActivity={setSelectedActivity}
        createActivity={handleCreateActivity}
        editActivity={handleEditActivity}
        deleteActivity={handleDeleteActivity}
      />
    </Fragment>
  );
}

export default App;
난 유

를 사용할 때 [FromBody]JSON 형식의 요청 본문은 JsonInputFormatterSystem.Text.Json(asp.net core 3.0)에 의해 처리 되므로 JSON에 대해 올바른 형식의 DateTime 값만 작동합니다.

여기에 이미지 설명 입력

문서 링크 : https://docs.microsoft.com/en-us/dotnet/standard/datetime/system-text-json-support

따라서 클라이언트에서 보낸 문자열이 같은 형식 YYYY-MM-DD HH:mm:ss이면 작동하지 않습니다. 클라이언트 측에서 형식을 변경하거나 쿼리 문자열을 통해 보내거나 (공백없이 요청이 구성되었는지 확인) 경로 값의 일부로 보낼 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Ajax를 사용하여 ASP.NET Core의 컨트롤러에 전달 된 매개 변수가 항상 NULL 인 이유는 무엇입니까?

분류에서Dev

ajax post .net 웹 API 매개 변수가 null입니다.

분류에서Dev

Asp.Net MVC에서 ApplicationUser가 항상 내 코드에서 null 인 이유는 무엇입니까?

분류에서Dev

ASP.NET 웹 API에서 GET 매개 변수를 가져 오는 방법은 무엇입니까?

분류에서Dev

ASP.NET 웹 API에서 GET 매개 변수를 가져 오는 방법은 무엇입니까?

분류에서Dev

ProcessExecutionEngine이 항상 웹 서비스에 null 입력 매개 변수를 보내는 이유는 무엇입니까?

분류에서Dev

Asp.net 핵심 문제의 페이지 매김, 10 개 항목 만 가져 와서 더 빠르지 않습니까?

분류에서Dev

Asp.Net 핵심 MVC Javascript Ajax 매개 변수 null HttpPost

분류에서Dev

DbContext에 삽입 한 후 IConfiguration 개체가 null 인 이유는 무엇입니까? [ASP.NET Core 3.1]

분류에서Dev

ref가 항상 null 인 이유는 무엇입니까?

분류에서Dev

내 ASP.NET 웹 서비스가이 POST 요청을 완료 할 수없는 이유는 무엇입니까?

분류에서Dev

모달에 대한이 매개 변수가 항상 정의되지 않은 이유는 무엇입니까?

분류에서Dev

파이썬의 입력 매개 변수로 ASP.net 웹 APi를 호출하는 방법은 무엇입니까?

분류에서Dev

선택적 매개 변수가있는 Asp.net 핵심 WebAPI 경로 만 작동하지 않음

분류에서Dev

SelectBox에서 선택한 항목의 Asp.net 핵심 가치는 0입니다.

분류에서Dev

중간 매개 변수가 'null'인 경우 for 루프가 종료되는 이유는 무엇입니까?

분류에서Dev

CloudKit의 핵심 데이터 데이터가 변경 될 때 WidgetKit 타임 라인 항목을 업데이트하는 방법은 무엇입니까?

분류에서Dev

이 POST 요청에서 then () 핸들러 함수의 매개 변수가 중괄호로 묶인 이유는 무엇입니까?

분류에서Dev

내 AppWidgetProvider의 onReceive에서 이러한 상태 변수가 null 인 이유는 무엇입니까?

분류에서Dev

ASP.Net 핵심 웹 API의 데이터베이스 쿼리 필터링

분류에서Dev

asp.net 핵심 API의 하위 개체에서 개체 속성 값을 설정하는 방법은 무엇입니까?

분류에서Dev

속성 파일에서 읽을 때 환경 변수가 항상 null 인 이유는 무엇입니까?

분류에서Dev

WebApi-내 게시물 변수가 항상 null 인 이유는 무엇입니까?

분류에서Dev

구독 이벤트가 항상 null 인 이유는 무엇입니까?

분류에서Dev

이 autowired 필드가 항상 null 인 이유는 무엇입니까?

분류에서Dev

ASP.NET 매개 변수가있는 쿼리에 "NULL"또는 "NOT NULL"삽입

분류에서Dev

Equals의 입력 매개 변수가 Object 유형 인 이유는 무엇입니까?

분류에서Dev

ls 명령의 매개 변수 앞에 대시가 필요하지만 tar 명령의 경우 대시가 선택 사항 인 이유는 무엇입니까?

분류에서Dev

ServiceBase의 OnStart () 메서드가 인수 매개 변수 인 이유는 무엇입니까?

Related 관련 기사

  1. 1

    Ajax를 사용하여 ASP.NET Core의 컨트롤러에 전달 된 매개 변수가 항상 NULL 인 이유는 무엇입니까?

  2. 2

    ajax post .net 웹 API 매개 변수가 null입니다.

  3. 3

    Asp.Net MVC에서 ApplicationUser가 항상 내 코드에서 null 인 이유는 무엇입니까?

  4. 4

    ASP.NET 웹 API에서 GET 매개 변수를 가져 오는 방법은 무엇입니까?

  5. 5

    ASP.NET 웹 API에서 GET 매개 변수를 가져 오는 방법은 무엇입니까?

  6. 6

    ProcessExecutionEngine이 항상 웹 서비스에 null 입력 매개 변수를 보내는 이유는 무엇입니까?

  7. 7

    Asp.net 핵심 문제의 페이지 매김, 10 개 항목 만 가져 와서 더 빠르지 않습니까?

  8. 8

    Asp.Net 핵심 MVC Javascript Ajax 매개 변수 null HttpPost

  9. 9

    DbContext에 삽입 한 후 IConfiguration 개체가 null 인 이유는 무엇입니까? [ASP.NET Core 3.1]

  10. 10

    ref가 항상 null 인 이유는 무엇입니까?

  11. 11

    내 ASP.NET 웹 서비스가이 POST 요청을 완료 할 수없는 이유는 무엇입니까?

  12. 12

    모달에 대한이 매개 변수가 항상 정의되지 않은 이유는 무엇입니까?

  13. 13

    파이썬의 입력 매개 변수로 ASP.net 웹 APi를 호출하는 방법은 무엇입니까?

  14. 14

    선택적 매개 변수가있는 Asp.net 핵심 WebAPI 경로 만 작동하지 않음

  15. 15

    SelectBox에서 선택한 항목의 Asp.net 핵심 가치는 0입니다.

  16. 16

    중간 매개 변수가 'null'인 경우 for 루프가 종료되는 이유는 무엇입니까?

  17. 17

    CloudKit의 핵심 데이터 데이터가 변경 될 때 WidgetKit 타임 라인 항목을 업데이트하는 방법은 무엇입니까?

  18. 18

    이 POST 요청에서 then () 핸들러 함수의 매개 변수가 중괄호로 묶인 이유는 무엇입니까?

  19. 19

    내 AppWidgetProvider의 onReceive에서 이러한 상태 변수가 null 인 이유는 무엇입니까?

  20. 20

    ASP.Net 핵심 웹 API의 데이터베이스 쿼리 필터링

  21. 21

    asp.net 핵심 API의 하위 개체에서 개체 속성 값을 설정하는 방법은 무엇입니까?

  22. 22

    속성 파일에서 읽을 때 환경 변수가 항상 null 인 이유는 무엇입니까?

  23. 23

    WebApi-내 게시물 변수가 항상 null 인 이유는 무엇입니까?

  24. 24

    구독 이벤트가 항상 null 인 이유는 무엇입니까?

  25. 25

    이 autowired 필드가 항상 null 인 이유는 무엇입니까?

  26. 26

    ASP.NET 매개 변수가있는 쿼리에 "NULL"또는 "NOT NULL"삽입

  27. 27

    Equals의 입력 매개 변수가 Object 유형 인 이유는 무엇입니까?

  28. 28

    ls 명령의 매개 변수 앞에 대시가 필요하지만 tar 명령의 경우 대시가 선택 사항 인 이유는 무엇입니까?

  29. 29

    ServiceBase의 OnStart () 메서드가 인수 매개 변수 인 이유는 무엇입니까?

뜨겁다태그

보관