本文介绍了当我从angular向我的.net控制器发出简单的发布请求时,值为null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这曾经是一个415错误的问题.

This used to be a 415 error question.

现在它是一个在服务器端接收空值的问题.

Now it is a a receiving null values on the server side question.

我很难尝试将myMessage对象中的值传递到服务器端.

I am having difficulty trying to get my values in the object myMessage over to the server side.

到目前为止,我已经尝试将JSON.stringify添加到在控制台中记录在服务文件中的newMessage中.

I have so far tried to add JSON.stringify to newMessage which is being console.logged in the service file.

我尝试了多种方法来更改或使对象变得可识别,例如JSON.stringify()并创建以正确参数结尾的url.

I tried many ways to alter or make the object the way it would be recognized such as JSON.stringify() and creating a url ending with the correct parameters.

很抱歉,如果我似乎在下面转储代码,但是我已经进行了第二天的工作,并且不明白为什么我不能使用三个参数来执行简单的发布请求.一个字符串,一个int和一个datetime.

Sorry if it seems like I am dumping code below, but I have been working on this for a second day and don't understand why I can't do a simple post request with three parameters. One string, one int, and one datetime.

如果任何人都能看到我哪里出了问题,我将不胜感激.我将拼命等待.在下面,我试图通过service.ts

If anyone can see where I have gone wrong I would so appreciate it. I will be desperately waiting.Below I am trying to hit api/SlgCorpNotes/Edit in backend from updateMessage(message: any) in the service in service.ts

slg-corp-notes.service.ts

import { Component, Injectable, Inject } from '@angular/core';
import { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http';
import { Observable, Subject, BehaviorSubject } from 'rxjs';
import { SLGReportParams, CorpNotes } from './models/slg.model';
import { SlgOverviewComponent } from './slg-overview/slg-overview.component';
import { SlgNote } from './models/slg-notes';

@Injectable({
  providedIn: 'root'
})
export class SlgCorpNotesService {

  constructor(private http: HttpClient, @Inject('BASE_URL') private baseUrl: string) { }

  getWeekTempValue(endDate, department) {
    var Params = '?endDate=' + endDate + '&department=' + department;
    return this.http.get<any>(this.baseUrl + 'api/SlgCorpNotes/getWeekTempValue' + Params);
  }

  updateMessage(message: any) {
    console.log("at service")
    console.log(message)
    var newMessage = new CorpNotes(message['departments'], message['noteBody'], message['weeks'].weekEnding)
    var Params = '?Department=' + message['departments'] + '&Note=' + message['noteBody'] + '&WeekEnding=' + message['weeks'].weekEnding
    console.log(newMessage)
    console.log(JSON.stringify(newMessage))
    console.log(Params)
const headers = new HttpHeaders()
  .set('Content-Type', 'application/json;charset=UTF-8')

let options = { headers: headers };

return this.http.post(this.baseUrl + 'api/SlgCorpNotes/Edit', JSON.stringify(newMessage), options).subscribe(res => {
  console.log(res);
}, error => {
  console.log(error);
});;
  }

}

model.ts

export class CorpNotes {
  constructor(
    public department: number,
    public note: string,
    public weekEnding: Date
  ) { }
}

SLGCorpNotesController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using mocHub2.Models;
using mocHub2.Models.Enterprise;
using Microsoft.EntityFrameworkCore;
using System.Data.SqlClient;

namespace mocHub2.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class SlgCorpNotesController : Controller
    {
        SLGContext _SLGContext;
        BRDataContext _BRDataContext;

        //injects new context
        public SlgCorpNotesController(SLGContext context, BRDataContext context2)
        {
            _SLGContext = context;
            _BRDataContext = context2;
        }

        // GET: api/SlgCorpNotes
        [HttpGet]
        public IEnumerable<string> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET: api/SlgCorpNotes/5
        [HttpGet("{id}", Name = "Get")]
        public string Get(int id)
        {
            return "value";
        }

        // POST: api/SlgCorpNotes
        [HttpPost]
        public void Post([FromBody] string value)
        {
        }

        // Get Corporate Notes
        [HttpGet("[action]")]
        public JsonResult getWeekTempValue(DateTime endDate, int department)
        {

            //  Find the WeekID from the weekending from SLGHeaderTemplate table
            var WeekID = (from x in _SLGContext.SlgheaderTemplate
                          where x.WeekEnding == endDate
                          select x.Id).ToList();
            //  Find Department name by ID
            var DepartmentString = (from x in _BRDataContext.Departments
                                    where x.Department == department
                                    select x.Description).ToList();
            //  Get the Note.
            var DeptNote = from x in _SLGContext.SLGCorpNotes
                           where x.Department == DepartmentString[0]
                           && x.WeekID == WeekID[0]
                           select x.Notes;

            //  Create return object
            var notes = new Notes();

            //  If Note exists then return Json containing note and department for display, else return empty string.
            if (DeptNote.Any() && WeekID.Count() > 0 && DepartmentString.Count() > 0)
            {
                var ReturnDeptNote = DeptNote.First();
                notes = new Notes() { WeekID = WeekID[0], Department = DepartmentString[0], Note = ReturnDeptNote };
            }
            else
            {
                var ReturnDeptNote = "";
                notes = new Notes() { WeekID = WeekID[0], Department = DepartmentString[0], Note = ReturnDeptNote };
            }

            return Json(notes);
        }

        [HttpPost]
        [Route("Edit")]
        public void Edit([FromForm] CorpNotes item)
        {

            _SLGContext.Entry(item).State = EntityState.Modified;
            _SLGContext.SaveChanges();
        }
    }

    public class CorpNotes
    {
        public int department { get; set; }

        public string note { get; set; }

        public DateTime weekEnding { get; set; }
    }

    public class Notes
    {
        public int ID { get; set; }

        public int WeekID { get; set; }

        public string Department { get; set; }

        public string Note { get; set; }

    }
}

服务文件中console.logs的结果.

Results of console.logs in the service file.

at service
slg-corp-notes.service.ts:22 {departments: 2, weeks: SLGTime, noteBody: "asdf"}
slg-corp-notes.service.ts:25 CorpNotes {department: 2, note: "asdf", weekEnding: "2019-11-02T00:00:00"}
slg-corp-notes.service.ts:26 {"department":2,"note":"asdf","weekEnding":"2019-11-02T00:00:00"}
slg-corp-notes.service.ts:27 ?Department=2&Note=asdf&WeekEnding=2019-11-02T00:00:00
slg-corp-notes.service.ts:28 Observable {_isScalar: false, source: Observable, operator: MapOperator}

app.module.ts 这是在我指定路线的app.module.ts中

app.module.tsThis is in my app.module.ts where I specify routes

  { path: 'slg-corp-notes', component: SlgCorpNotesComponent },
  { path: 'slg-corp-notes/edit/', component: SlgCorpNotesComponent }

slg-corp-notes.component.ts

  save() {
    console.log("at save")
    if (!this.optionsForm.valid) {
      return;
    }
    //this.Notes.note = this.optionsForm.get['noteBody'].value;
    console.log(this.Notes);
    this._slgCorpNotesService.updateMessage(this.optionsForm.value)
      .subscribe((data) => {
        this._router.navigate(['/slg-corp-notes']);   //This will navigate back to the mochhub2 index where the message will be displayed
      }, error => this.errorMessage = error)
  }

请让我知道是否需要其他信息.

Please let me know if additional info is needed.

推荐答案

在您的角度更新这样的方法

At your angular side update your method like this

    updateMessage(message: any) {
    console.log("at service")
    console.log(message)
    var newMessage = new CorpNotes(message['departments'], message['noteBody'], message['weeks'].weekEnding)
    var Params = '?Department=' + message['departments'] + '&Note=' + message['noteBody'] + '&WeekEnding=' + message['weeks'].weekEnding
    console.log(newMessage)
    console.log(JSON.stringify(newMessage))
    console.log(Params)


   var item = {
    "Departments": message["Departments"],
    "Note": message["noteBody"],
    "WeekEnding": message["weeks"]
   }

    return this.http.post(this.baseUrl + 'api/SlgCorpNotes/Edit', item).subscribe(res 
      => {
       console.log(res);
    }, error => {
         console.log(error);
    });
  }

这篇关于当我从angular向我的.net控制器发出简单的发布请求时,值为null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-30 17:08