小编Mat*_*arr的帖子

CustomValidation属性 - NullReferenceException

我为我在MVC应用程序中使用的模型编写了一个CustomValidation属性.

它并不复杂,但由于某种原因,我得到一个非常奇怪的NullReferenceException错误.我已经把这个权利剥离到了绝对的最低限度,只是为了试图超越这个.

代码在这里绊倒 if (value != null)

如果我在它上面的行上放置一个断点,那么踩到断点会产生异常.

奇怪的是,我可以value把它放到一个字符串变量中,我可以看到它是有效的和存在的.

然后我尝试更改if语句以检查该变量是否为null而不是valueALSO产生错误.

我做错了什么?

从控制器返回的实际错误响应如下.它引用的行是If语句.

<h1>An unhandled exception occurred while processing the request.</h1>
        <div class="titleerror">NullReferenceException: Object reference not set to an instance of an object.</div>
        <p class="location">TechsportiseOnline.Helpers.CustomValidations&#x2B;BibValidatorAttribute.IsValid(object value, ValidationContext validationContext) in 
            <code title="C:\Users\matthew.warr\Documents\Git\Website\TechsportiseOnline\Helpers\CustomValidations.cs">CustomValidations.cs</code>, line 22
        </p>
Run Code Online (Sandbox Code Playgroud)

CustomAttribute类

public class BibValidatorAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        value = (string)value;

        if (value != null)
        {
            RaceEntry raceEntry = (RaceEntry)validationContext.ObjectInstance;

            var _context = (ApplicationDbContext)validationContext.GetService(typeof(ApplicationDbContext));

            var databaseBib …
Run Code Online (Sandbox Code Playgroud)

c# .net-core-2.0

5
推荐指数
0
解决办法
135
查看次数

添加到ObservableCollection - 对象引用错误

我正在使用绑定的ViewModel创建一个带有Xamarin Forms的秒表类型应用程序.在代码中,我想要完成的是当在View中按下"Lap"按钮时会触发一个Command,它运行一个方法,该方法应该向对象添加一堆细节,然后将其添加到ObservableCollection中.

我遇到的问题是,"添加"按钮实际上并没有添加到集合中.

我收到错误"System.NullReferenceException:对象引用未设置为对象的实例." 在这条线上

RaceTimings.Add(lap);
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?完整代码如下.

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Timers;
using System.Windows.Input;
using TechsportiseApp.Models;
using Xamarin.Forms;

namespace TechsportiseApp.ViewModels
{
    public class TimerViewModel : INotifyPropertyChanged
    {

        public Timer myTimer = new Timer();

        public ICommand StartTimerCommand { get; set; }
        public ICommand LapCommand { get; set; }

        public TimerViewModel()
        {
            StartTimerCommand = new Command(StartTimer);
            LapCommand = new Command(LapButton);

            LapPosition = 1;
        }

        //TimeSpan _elapsedTime;
        //public TimeSpan ElapsedTime
        //{
        //    get { …
Run Code Online (Sandbox Code Playgroud)

c# observablecollection xamarin xamarin.forms

4
推荐指数
1
解决办法
741
查看次数

JWT 授权重定向到登录

我使用标准身份开发了一个带有个人用户帐户的 Core 2 MVC 应用程序。MVC 应用程序一切正常。

我正在尝试添加公共 API 并使用 JWT 授权请求。

但是,在尝试授权用户时出现问题。当我向控制器提交请求时,它会将我重定向到我的登录页面,因此响应正文是 HTML。

我需要授权并返回数据(如果令牌无效,则不需要)。

我做错了什么?令牌生成一切正常。

令牌控制器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;
using TechsportiseOnline.Models.AccountViewModels;
using Microsoft.AspNetCore.Identity;
using TechsportiseOnline.Models;
using System.Security.Claims;
using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens;
using System.Text;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Options;
using TechsportiseOnline.Helpers;

namespace TechsportiseOnline.Controllers
{
    [Produces("application/json")]
    [Route("api/Token")]
    public class TokenController : Controller
    {
        private readonly UserManager<ApplicationUser> _userManager;
        private readonly SignInManager<ApplicationUser> _signInManager;
        private readonly IConfiguration _configuration;
        private readonly IOptions<JWTSettings> _jwtConfig;

        public TokenController(
              UserManager<ApplicationUser> …
Run Code Online (Sandbox Code Playgroud)

c# jwt asp.net-web-api asp.net-core asp.net-core-2.0

3
推荐指数
1
解决办法
4130
查看次数

Xamarin Button命令(ListView.ItemTemplate内部)未触发

我的项目中有一个XAML视图和一个视图模型.该项目是一个秒表,按下Lap按钮时,它会向ObservableCollection添加一个对象,该对象在视图中显示为ListView.

在ListView中,我添加了一个按钮来删除其中一个Collection项.它有一个带有"DeleteTimingCommand"绑定的Command和一个带有"Position"绑定的CommandParameter,它是我想用来从集合中删除对象的标识符.

DeleteTimingCommand位于ViewModel构造函数中,并设置为触发一个名为"DeleteTiming"的方法.然后,此方法负责实际删除.

但是,我无法让我的代码完全按下我的DeleteTiming()方法!无论我在哪里设置断点,都没有任何东西可以解决它.我按下按钮,没有任何反应.

有些东西没有正确连接.谁能指出我正确的方向?

XAML

 <?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" 
    x:Class="TechsportiseApp.Views.Timer" Title="Timer">
    <StackLayout VerticalOptions="Start" HorizontalOptions="FillAndExpand">
        <StackLayout Orientation="Horizontal">
            <Label Text="{Binding ElapsedTime}" HorizontalOptions="FillAndExpand" HorizontalTextAlignment="Center" FontSize="40"/>
            <Button Command="{Binding LapCommand}" BackgroundColor="#eca400" IsVisible="{Binding EndVisibility}" Image="Scanning.png" WidthRequest="50" HeightRequest="50"/>
        </StackLayout>
        <Button x:Name="buttonStart" Text="Start Race" Command="{Binding StartTimerCommand}" IsVisible="{Binding StartVisibility}" />
        <Button x:Name="buttonEnd" Text="End Race" Command="{Binding EndTimerCommand}" IsVisible="{Binding EndVisibility}" />
        <Button x:Name="buttonSubmit" Text="Submit Results" Command="{Binding EndTimerCommand}" IsVisible="{Binding SubmitVisibility}" />
        <BoxView HeightRequest="1" Color="Silver" HorizontalOptions="FillAndExpand" />
        <Label Text="YOUR RESULTS" HorizontalOptions="FillAndExpand" HorizontalTextAlignment="Center" FontSize="Small" FontAttributes="Bold"/>
        <BoxView HeightRequest="1" Color="Silver" HorizontalOptions="FillAndExpand" />

        <ListView …
Run Code Online (Sandbox Code Playgroud)

c# xaml xamarin xamarin.forms

2
推荐指数
1
解决办法
1997
查看次数

C#反序列化JSON到列表

尝试将JSON字符串(包含多个对象)反序列化为List时遇到一个我不明白的问题。这是JSON。

[  
   {  
      "id":2,
      "name":"Race 1",
      "raceDateTime":"2017-09-02T14:27:39.654",
      "raceStartTime":"2017-09-02T14:27:39.654",
      "description":"string",
      "maxEntries":0,
      "currentEntries":0,
      "status":0
   },
   {  
      "id":3,
      "name":"Race 2",
      "raceDateTime":"2017-09-02T14:27:39.654",
      "raceStartTime":"2017-09-02T14:27:39.654",
      "description":"string",
      "maxEntries":0,
      "currentEntries":0,
      "status":0
   },
   {  
      "id":4,
      "name":"Race 3",
      "raceDateTime":"2017-09-02T14:27:39.654",
      "raceStartTime":"2017-09-02T14:27:39.654",
      "description":"string",
      "maxEntries":0,
      "currentEntries":0,
      "status":0
   },
   {  
      "id":5,
      "name":"Race 4",
      "raceDateTime":"2017-09-02T14:27:39.654",
      "raceStartTime":"2017-09-02T14:27:39.654",
      "description":"string",
      "maxEntries":0,
      "currentEntries":0,
      "status":0
   }
]
Run Code Online (Sandbox Code Playgroud)

然后,我有与我的模型匹配的JSON参数。

public class RaceModel
{

    public int id { get; set; }
    public string name { get; set; }
    public DateTime raceDateTime { get; set; }
    public DateTime raceStartTime { get; set; } …
Run Code Online (Sandbox Code Playgroud)

c# json json.net

0
推荐指数
1
解决办法
4572
查看次数

在自定义验证属性中使用DB上下文

我正在尝试在我的Core 2项目中创建一个valdiation属性.它需要根据数据库中保存的现有值列表验证该值.

下面的代码不起作用,它无法访问数据库上下文.

任何想法为什么/如何纠正?

public class BibValidatorAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(
        object value, ValidationContext validationContext)
    {
        RaceEntryViewModel raceEntry = (RaceEntryViewModel)validationContext.ObjectInstance;
        ApplicationDbContext _context = new ApplicationDbContext();

        var dbraceEntry = _context.RaceEntries.FirstOrDefault(c => c.Id == raceEntry.Id);

        if(raceEntry.BibNumber != dbraceEntry.BibNumber)
        {
            if (value != null)
            {
                var raceentries = from r in _context.RaceEntries
                                  select r;

                var mycount = raceentries.Count(c => c.BibNumber == raceEntry.BibNumber);

                if (mycount != 0)
                {
                    return new ValidationResult("The bib number entered already exists");
                }
                else
                {
                    return ValidationResult.Success; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core-2.0

0
推荐指数
1
解决办法
1404
查看次数